I would like to encrypt a secret text by public-key and decrypt it by private-key in Python.
I can achieve that with the openssl
command:
echo "secrettext/2011/09/14 22:57:23" | openssl rsautl -encrypt -pubin -inkey public.pem | base64 data.cry
base64 -D data.cry | openssl rsautl -decrypt -inkey private.pem
How would one implement that in Python?
Currently Python versions 3.6 to 3.9 are compatible with OpenSSL 1.0. 2, 1.1. 0, and 1.1. 1.
Most of the code for the ssl module is written in C, rather than in Python.
#!/usr/bin/env python
import fileinput
from M2Crypto import RSA
rsa = RSA.load_pub_key("public.pem")
ctxt = rsa.public_encrypt(fileinput.input().read(), RSA.pkcs1_oaep_padding)
print ctxt.encode('base64')
#!/usr/bin/env python
import fileinput
from M2Crypto import RSA
priv = RSA.load_key("private.pem")
ctxt = fileinput.input().read().decode('base64')
print priv.private_decrypt(ctxt, RSA.pkcs1_oaep_padding)
See also How to encrypt a string using the key and What is the best way to encode string by public-key in python.
Probably the easiest way to get exactly the same behaviour would be using pyOpenSSL - it's a thin Python wrapper for OpenSSL itself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With