Working interface.
- Encrypt a signle word message. for now - Decrypt only with target private key - Runtime errors when using wrong key to decrypt or message too long.
This commit is contained in:
parent
a1e05a572a
commit
feeea933c3
43
rsa.py
43
rsa.py
@ -21,12 +21,25 @@ def main():
|
||||
except Exception as ex:
|
||||
print(ex)
|
||||
exit(1)
|
||||
if sys.argv[1] == "encrypt" and len(sys.argv) == 4:
|
||||
msg = sys.argv[2]
|
||||
keyName = sys.argv[3]
|
||||
key = readKeyFile(keyName)
|
||||
key_public = (key[0], key[1])
|
||||
msg_encrypted = encrypt(msg, key_public)
|
||||
if len(sys.argv) == 4:
|
||||
if sys.argv[1] == "encrypt": ##rsa encrypt <message> <key>
|
||||
msg = sys.argv[2]
|
||||
keyName = sys.argv[3]
|
||||
key = readKeyFile(keyName)
|
||||
key_public = (key[0], key[1])
|
||||
msg_encrypted = encrypt(msg, key_public)
|
||||
print("Encrypted msg: ", msg_encrypted)
|
||||
if sys.argv[1] == "decrypt": ##rsa decrypt <cipher> <key>
|
||||
fileName = sys.argv[2]
|
||||
key = readKeyFile(sys.argv[3])
|
||||
cipher = int()
|
||||
with open(fileName, "r") as cipherFile:
|
||||
cipher = int(cipherFile.readline()) ##one line may make problems later with padding
|
||||
msg = decrypt(cipher, key[2],key[0])
|
||||
print("Decrypted message: ", msg)
|
||||
|
||||
|
||||
|
||||
|
||||
def generateKeys(bits=64):
|
||||
#Primes of size 32 bit random
|
||||
@ -55,10 +68,24 @@ def generateKeys(bits=64):
|
||||
return n, e, d
|
||||
|
||||
def encrypt(message, publicKey):
|
||||
return None
|
||||
msg_text = message
|
||||
n = publicKey[0]
|
||||
e = publicKey[1]
|
||||
print("using n: {0}, e: {1}".format(n, e))
|
||||
|
||||
msg_number_form = int.from_bytes(msg_text.encode(),"little")
|
||||
print("Message: %s or %d" % (msg_text, msg_number_form))
|
||||
|
||||
msg_encrypted_number_form = pow(msg_number_form, e, n) # c = msg^e mod n
|
||||
return msg_encrypted_number_form
|
||||
|
||||
def decrypt(cipher, privateKey, n):
|
||||
pass
|
||||
msg_encrypted_number_form = cipher
|
||||
d = privateKey
|
||||
msg_decrypted_number_form = pow(msg_encrypted_number_form, d, n) # m = c^d mod n
|
||||
msg_decrypted = int(msg_decrypted_number_form)
|
||||
msg_decrypted = str(msg_decrypted.to_bytes(msg_decrypted.bit_length(), "little").decode()).strip()
|
||||
return msg_decrypted
|
||||
|
||||
def getPrime(bits):
|
||||
while True:
|
||||
|
Loading…
Reference in New Issue
Block a user