-
-
Save syedrakib/241b68f5aeaefd7ef8e2 to your computer and use it in GitHub Desktop.
# 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)) | |
Hi @GavinAren,
I hope you've already solved your issue but if not:
Look in your python directory for /Lib/site-packages/crypto and change it to Crypto. (Capital C)
I ran this code but got an error. It is python 3.7 running the latest PyCryptodome
Hey, I'm trying to run this code on Python 3.7 too. What did you change apart from that print statement to adapt the code to Pycrytodome?
I get the error:File "C:/Users/...(don't want to show this bit)/Gavcoin3.py", line 15, in
from crypto.Hash import SHA
File "C:\Users(don't want to show this bit)\AppData\Local\Programs\Python\Python37\lib\site-packages\crypto\Hash\SHA.py", line 24, in
from Crypto.Hash.SHA1 import doc, new, block_size, digest_size
ModuleNotFoundError: No module named 'Crypto'Please help!
PyCrypto is written and tested using Python version 2.1 through 3.3. Python
1.5.2 is not supported. My POC resolves that pycrypto is obsoleted in python3.7. Pycryptodome is working alternative of it, but unfortunately it doesn't support plain RSA cryptography.
def encrypt(self, plaintext, K):
raise NotImplementedError("Use module Crypto.Cipher.PKCS1_OAEP instead")
Hey, I'm trying to run this code on Python 3.7 too. What did you change apart from that print statement to adapt the code to Pycrytodome?
I get the error:
Please help!