-
-
Save itzceekay/22d28928955f93d1cf50861152797632 to your computer and use it in GitHub Desktop.
An example of asymmetric encryption in python using a public/private keypair - utilizes RSA from PyCrypto library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Inspired from http://coding4streetcred.com/blog/post/Asymmetric-Encryption-Revisited-(in-PyCrypto) | |
# PyCrypto docs available at https://www.dlitz.net/software/pycrypto/api/2.6/ | |
from Crypto import Random | |
from Crypto.PublicKey import RSA | |
import base64 | |
def generate_keys(): | |
# RSA modulus length must be a multiple of 256 and >= 1024 | |
modulus_length = 256*4 # use larger value in production | |
privatekey = RSA.generate(modulus_length, Random.new().read) | |
publickey = privatekey.publickey() | |
return privatekey, publickey | |
def encrypt_message(a_message , publickey): | |
encrypted_msg = publickey.encrypt(a_message, 32)[0] | |
encoded_encrypted_msg = base64.b64encode(encrypted_msg) # base64 encoded strings are database friendly | |
return encoded_encrypted_msg | |
def decrypt_message(encoded_encrypted_msg, privatekey): | |
decoded_encrypted_msg = base64.b64decode(encoded_encrypted_msg) | |
decoded_decrypted_msg = privatekey.decrypt(decoded_encrypted_msg) | |
return decoded_decrypted_msg | |
########## BEGIN ########## | |
a_message = "The quick brown fox jumped over the lazy dog" | |
privatekey , publickey = generate_keys() | |
encrypted_msg = encrypt_message(a_message , publickey) | |
decrypted_msg = decrypt_message(encrypted_msg, privatekey) | |
print "%s - (%d)" % (privatekey.exportKey() , len(privatekey.exportKey())) | |
print "%s - (%d)" % (publickey.exportKey() , len(publickey.exportKey())) | |
print " Original content: %s - (%d)" % (a_message, len(a_message)) | |
print "Encrypted message: %s - (%d)" % (encrypted_msg, len(encrypted_msg)) | |
print "Decrypted message: %s - (%d)" % (decrypted_msg, len(decrypted_msg)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment