blob: d05b35135db9d79896129a0967e1e5e9eeea16c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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)
|