14

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?

3 Answers 3

21

Encrypt

#!/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')

Decrypt

#!/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)

Dependencies:

See also How to encrypt a string using the key and What is the best way to encode string by public-key in python.

Sign up to request clarification or add additional context in comments.

Comments

3

Probably the easiest way to get exactly the same behaviour would be using pyOpenSSL - it's a thin Python wrapper for OpenSSL itself.

1 Comment

a code sample would be great; the docs on pyopenssl are quite a bit more opaque.
1

The m2crypto module(s) expose much of OpenSSL's functionality to Python, including public/private encryption, decryption, and signing.

Most Linux distribution provide the m2crypto module as a native package.

2 Comments

thanks. I know that module. But I can't write that code using m2crypto. Could you tell me information with more specific function ?
Show me what you've tried and what sort of errors you're getting and I would be happy to help out.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.