Hey Everyone,<br><br>I am playing around with PyCrypto and public key encryption using RSA.<br>The thing is that I already have an RSA private key, and an X509 certificate which contains the RSA public key belonging to the private key.<br>


<br>I succesfully exported the public key starting with the private key file like this.<br><br>from Crypto.PublicKey import RSA<br>from Crypto import Random<br>privkey1=RSA.importKey(open(&#39;/path/to/private.key&#39;,&#39;r&#39;).read())<br>


pubkey1=privkey1.publickey()<br>print pubkey1.exportKey(format=&#39;PEM&#39;)<br><br>When I compare the print output with the output of the openssl tool which can extrac the public key from an x509 certificate file with the following command<br>


openssl x509 -inform pem -in /path/to/certificate.crt -pubkey -noout<br><br>The public keys are indeed the same, so the exporting with pycrypto and extracting with openssl produce the same public key.<br>But is it possible to use pycrypto (or another library) to extract the public key from the certificate file (like openssl does)?<br>


<br>Another question is the following:<br><br>rng=Random.new().read<br><br>This works fine:<br>privkey1.decrypt(pubkey1.encrypt(s,rng))<br><br>But this raises a typeError:<br>pubkey1.decrypt(privkey1.encrypt(s,rng))<br clear="all">


<br>But the keys are symmetric right? So it should be possible to encrypt something with the private key and decypt that with the public key. It doesn&#39;t make sense to do this since then anyone can decrypt the data, which you just encrypted with the private key, making encryption useless in the first place. But the difference between RSA public and private keys is only the name. Which one is public, and which one is private is just a matter of choice, not a technical difference right? So why then does the PyCrypto library raise a TypeError in the first case?<br>


Cheers,<br><br>Dolf.<br>