Hello,<br>I&#39;m trying to import/export keys from/to <a href="http://pear.php.net/package/Crypt_RSA">Crypt_RSA</a>, using <a href="http://www.dlitz.net/software/pycrypto/">PyCrypto</a>. My problem is that while using PyCrypto to generate both public and private keys, the e(exponent?) is always the same.<br>
According to this site: <a href="http://pajhome.org.uk/crypt/rsa/rsa.html">http://pajhome.org.uk/crypt/rsa/rsa.html</a>, and yet others, the e(exponent?) is used for the public key, and d for the private key.<br>


  <table class="lined" align="center" cellspacing="0"><tbody><tr><td width="50%">
    <h3 style="text-align: center;">Public Key</h3>
    <p><span class="math">n = 133<br>
    e = 5</span></p>
  </td>
  <td width="50%">
    <h3 style="text-align: center;">Secret Key</h3>
    <p><span class="math">n = 133<br>
    d = 65</span></p></td></tr></tbody></table><br>With Crypt_RSA&nbsp; the e(exponent!) does change. And, currently, Crypt_RSA &#39;should&#39; import a key with:<br><pre><font color="blue">function&nbsp;</font><a href="http://pear.php.net/package/Crypt_RSA/docs/latest/Crypt_RSA/Crypt_RSA_Key.html#methodCrypt_RSA_Key" target="_blank">Crypt_RSA_Key</a><strong>(</strong><strong>$modulus</strong><strong>,&nbsp;</strong><strong>$exp</strong><strong>,&nbsp;</strong><strong>$key_type</strong><strong>,&nbsp;</strong><strong>$wrapper_name&nbsp;</strong>=&nbsp;<span>&#39;default&#39;</span><strong>,&nbsp;</strong><strong>$error_handler&nbsp;</strong>=&nbsp;<span>&#39;&#39;</span><strong>)</strong></pre>
<br>I&#39;ve made some examples to find out why it&#39;s no working, I couldn&#39;t find anything besides what I&#39;m telling here, I&#39;m getting:<br><pre><strong></strong></pre>I&#39;m getting:<br><br><b>php output:</b><br>
public:<br>e = 576770076438170600293020230006<div id=":gv" class="ArwC7c ckChnd">11111558980619493053522755045300999066282094579<br>n = 8181236468479469953170512321145304204212043012891758446155743461774497958816815322484398388795674807728198188380330393972375008693925124720339387183472981<br>

<br>private:<br>e = 437180361711592053741873121324365600858808727935298705094471030803249044470609246732980373383618106117311336729585366532974229499133803473168583498751419<br>n = 8181236468479469953170512321145304204212043012891758446155743461774497958816815322484398388795674807728198188380330393972375008693925124720339387183472981<br>

<br>plain text:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the secret phrase testing.<br>key:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YTozOntpOjA7czo2NDoiVSFbfK0ZrvVUOUo/EejHR7YO4F8ugtRGrDPSjrTZEMYZqLUuiZhNhxr2ZdSyvoBN/2wfVnYJzqqYrYT/BA01nCI7aToxO3M6MzI6IvPv6+fj39vXU1DMyMRAvbk1sq4qpyOgHJkVkg6LB4R/IjtpOjI7czo2OiJwdWJsaWMiO30=<br>

encrypted text:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mBL6f3pRyFX34nB/0H5jL3VOwylAjJzGx32UKS11EOhtooAVjdiYZHGh5jUOAUWj3GD9+ccPPyh5afXmGrq3UA==<br>decrypted text:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the secret phrase testing.<br><br><b>python output:</b><br>privkey<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n=6725954312330247844957820045120819261330667638399165421086669714474128366894973621051940873915934423533814876921018123156635212781400913635892080927069649<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e=65537<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d=4335534734949590616144210259946732528112578457728805761841499642766064251636039038235790562167224376876190746808970727821310520543898873435686861965120773<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=67052724006509355618909096968505962144329319327659728670702224750645922227811<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q=100308442527663820502897858910213458115962396303231005493840992047817473580859<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u=49237107846093262220122150056829317849796914810691525815572680169759496162772<br><br>pubkey<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n=6725954312330247844957820045120819261330667638399165421086669714474128366894973621051940873915934423533814876921018123156635212781400913635892080927069649<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e=65537<br><br>msg=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is the secret phrase testing.<br>data=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sh&#39;fâªaÓÏ!_ÍTÊÅ\~1rA²µG!ðbS(e¨&reg;e{]Èî¬&lt;PÍL³,$h<br>strdata=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&quot;Sh&#39;f\x12\xe2\xaa\x82a\xd3\xcf\x98!_\xcd\x94T\xca\x05\xc5\\~\x7f1r\x95\x9eA\xb2\xb5G!\x15\xf0bS(e\x94\xa8\x90\xaee\x01{]\xc8\xee\xac&lt;\x07P\xcd\x87\x8eL\x84\x8e\x8f\xb3,\x9a$h&quot;,)<br>
decrypted=&nbsp;&nbsp; This is the secret phrase testing.<br>
</div><br>here are the sources:<br><b>cryp.py<br></b>from Crypto.PublicKey import RSA<br>from Crypto.Util.randpool import RandomPool<br>import os<br>rpool = RandomPool()<br><br># Generate keys<br>print os.urandom(0);<br>
privkeyA = RSA.generate(512, rpool.get_bytes)<br>pubkeyA = privkeyA.publickey()<br><br>msg = &#39;This is the secret phrase testing.&#39;<br>msgc = pubkeyA.encrypt(msg, &#39;&#39;)<br>msgf = privkeyA.decrypt(msgc)<br><br>
print &#39;privkey\n\tn=%s\n\te=%s\n\td=%s\n\tp=%s\n\tq=%s\n\tu=%s\n&#39; % (privkeyA.n, privkeyA.e, privkeyA.d, privkeyA.p, privkeyA.q, privkeyA.u)<br>print &#39;pubkey\n\tn=%s\n\te=%s\n&#39; % (pubkeyA.n, pubkeyA.e)<br>
print &#39;msg=\t\t%s\ndata=\t\t%s\nstrdata=\t%s\ndecrypted=\t%s\n&#39; % (msg, msgc[0],str(msgc),msgf)<br><br><b>cryp.php<br></b>&lt;?php<br>&nbsp;&nbsp;&nbsp; require_once &#39;Crypt/RSA.php&#39;;<br>&nbsp;&nbsp;&nbsp; require_once &#39;Crypt/RSA/MathLoader.php&#39;;<br>
<br>&nbsp;&nbsp;&nbsp; //Generates the pair keys<br>&nbsp;&nbsp;&nbsp; function generate_key_pair()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; global $public_key,$private_key;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $obj = &amp;Crypt_RSA_MathLoader::loadWrapper(&#39;default&#39;);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $key_pair = new Crypt_RSA_KeyPair(512);<br>
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Returns public key from the pair<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $public_key = $key_pair-&gt;getPublicKey();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo &quot;public:\ne = &quot;.$obj-&gt;bin2int($public_key-&gt;getExponent()).&quot;\nn = &quot;.$obj-&gt;bin2int($public_key-&gt;getModulus()).&quot;\n\n&quot;;<br>
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Returns private key from the pair<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $private_key = $key_pair-&gt;getPrivateKey();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo &quot;private:\ne = &quot;.$obj-&gt;bin2int($private_key-&gt;getExponent()).&quot;\nn = &quot;.$obj-&gt;bin2int($private_key-&gt;getModulus()).&quot;\n\n&quot;;<br>
&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; //Check runtime errors<br>&nbsp;&nbsp;&nbsp; function check_error(&amp;$obj)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (PEAR::isError($obj)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo &quot;error: &quot;, $obj-&gt;getMessage(), &quot;\n&quot;;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($obj-&gt;isError()){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$error = $obj-&gt;getLastError();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;switch ($error-&gt;getCode()) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;case CRYPT_RSA_ERROR_WRONG_TAIL :<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // nothing to do<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;default:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // echo error message and exit<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo &#39;error: &#39;, $error-&gt;getMessage();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; exit;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; generate_key_pair();<br>&nbsp;&nbsp;&nbsp; $plain_text = &#39;This is the secret phrase testing.&#39;;<br>
&nbsp;&nbsp;&nbsp; echo &quot;plain text:\t\t&quot;.$plain_text.&quot;\n&quot;;<br><br>&nbsp;&nbsp;&nbsp; //get string represenation of the public key<br>&nbsp;&nbsp;&nbsp; $key = Crypt_RSA_Key::fromString($public_key-&gt;toString()); <br>&nbsp;&nbsp;&nbsp; echo &quot;key:\t\t\t&quot;.$public_key-&gt;toString().&quot;\n&quot;;<br>
<br>&nbsp;&nbsp;&nbsp; $rsa_obj = new Crypt_RSA;<br>&nbsp;&nbsp;&nbsp; check_error($rsa_obj);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //Ecnrypts $plain_text by the key $key.<br>&nbsp;&nbsp;&nbsp; $encrypted = $rsa_obj-&gt;encrypt($plain_text, $key);<br><br>&nbsp;&nbsp;&nbsp; $enc_text = $encrypted;<br>
&nbsp;&nbsp;&nbsp; echo &quot;encrypted text:\t\t&quot;.$enc_text.&quot;\n&quot;;<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; //Get string represenation of the private key<br>&nbsp;&nbsp;&nbsp; $key2 = Crypt_RSA_Key::fromString($private_key-&gt;toString());<br>&nbsp;&nbsp;&nbsp; check_error($key2);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //Check encrypting/decrypting function&#39;s behaviour<br>&nbsp;&nbsp;&nbsp; $rsa_obj-&gt;setParams(array(&#39;dec_key&#39; =&gt; $key2));<br>&nbsp;&nbsp;&nbsp; check_error($rsa_obj);<br><br>&nbsp;&nbsp;&nbsp; //Decrypts $enc_text<br>&nbsp;&nbsp;&nbsp; $decrypted = $rsa_obj-&gt;decrypt($enc_text);<br>
&nbsp;&nbsp;&nbsp; echo &quot;decrypted text:\t\t&quot;.$decrypted.&quot;\n&quot;;<br><br>?&gt;<br><br>Thanks in advance.<br>