diff options
Diffstat (limited to 'final')
-rw-r--r-- | final/rsa-decrypt.py | 29 | ||||
-rw-r--r-- | final/rsa-encrypt.py | 23 |
2 files changed, 52 insertions, 0 deletions
diff --git a/final/rsa-decrypt.py b/final/rsa-decrypt.py new file mode 100644 index 0000000..d05b351 --- /dev/null +++ b/final/rsa-decrypt.py @@ -0,0 +1,29 @@ +encrypted = [405, 35, 133, 371, 435, 279] # Directly from demo output of encrypted +p = 29 +q = 17 +n = p*q +tot = (p-1)*(q-1) +e = 3 + +# Calculate d such that ed == 1 mod tot +d = 1 # Guess +while (e*d % tot != 1): + d += 1 +# Algorithm is currently extremely dumb + +def decrypt_block(blk): + return blk**d % n + +decrypted = [decrypt_block(block) for block in encrypted] + +messagenum = 0 +for blockind in range(len(decrypted)): + block = decrypted[blockind] + messagenum += block * n ** blockind + +message = '' +while messagenum > 0: + message = chr(messagenum%128) + message + messagenum = (messagenum-messagenum%128)//128 + +print(message) diff --git a/final/rsa-encrypt.py b/final/rsa-encrypt.py new file mode 100644 index 0000000..de9ba1e --- /dev/null +++ b/final/rsa-encrypt.py @@ -0,0 +1,23 @@ +p = 29 +q = 17 +n = p*q +tot = (p-1)*(q-1) +e = 3 # Many present strictly for convenience's sake + +message = 'abcdef' +messagenum = 0 +for char in message: + messagenum += ord(char) + messagenum *= 128 # Assuming ASCII only characters + +messageblocks = [] +while messagenum > 0: + messageblocks.append(messagenum%n) + messagenum = (messagenum-messagenum%n)//n +print(messageblocks) + +def encrypt_block(blk): + return (blk ** e) % n + +encrypted = [encrypt_block(block) for block in messageblocks] +print(encrypted) |