47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
#
|
|
#
|
|
#
|
|
import logging
|
|
from Crypto.PublicKey import RSA
|
|
from Crypto.Cipher import PKCS1_v1_5
|
|
|
|
print ("Generating keys...")
|
|
|
|
msg = 'attack at dawn'
|
|
key = RSA.generate(4096) # I know this is a huge overkill
|
|
pubkey = RSA.importKey(key.publickey().exportKey('DER'))
|
|
privkey = RSA.importKey(key.exportKey('DER'))
|
|
|
|
cipher = PKCS1_v1_5.new(pubkey)
|
|
ciphertext = cipher.encrypt(msg.encode())
|
|
|
|
print("text: {}".format(msg))
|
|
print("crypt: {}".format(ciphertext))
|
|
|
|
# decrypt(self, ct, sentinel)
|
|
# ct== cypher text, b'text as bytes'
|
|
# sentinel== object to be return on error
|
|
# https://pythonhosted.org/pycrypto/Crypto.Cipher.PKCS1_v1_5.PKCS115_Cipher-class.html#encrypt
|
|
dcipher = PKCS1_v1_5.new(privkey)
|
|
secret = dcipher.decrypt(ciphertext, 'ERROR: decrypting')
|
|
print("text: {}".format(secret))
|
|
|
|
|
|
#
|
|
# exportKey() documentation says, "construct a new key carrying only the public info"
|
|
# testing that a new key isn't created, key should be the same
|
|
#
|
|
print("\n\n")
|
|
print("*** *** *** ***")
|
|
print("*** Key Gen Test ***")
|
|
print("*** *** *** ***")
|
|
|
|
print("*** NEW PUB KEY:")
|
|
print("{}\n".format(key.publickey().exportKey('PEM')))
|
|
|
|
print("*** NEW PUB KEY:")
|
|
print("{}\n".format(key.publickey().exportKey('PEM')))
|
|
|
|
print("*** PRIV KEY:")
|
|
print("{}\n".format(key.exportKey('PEM')))
|