Files
netsec/week06/easy/test.py
2024-12-10 00:51:04 +09:00

36 lines
1.0 KiB
Python

import random
from Crypto.Util.number import getPrime, inverse
from Crypto.Util.number import inverse
def moc_encryption_message(p, q):
message = int.from_bytes("flaggy".encode(), 'big')
print("original message: ", message)
c = pow(message,p,q)
return c
def modular_inverse(p, phi_q):
x = inverse(p, phi_q)
return x % phi_q
def decrypt_message(encrypted, p, q):
phi_q = q - 1
d = modular_inverse(p, phi_q)
message = pow(encrypted, d, q)
return message
if __name__ == "__main__":
bit_length = 992
o = getPrime(bit_length*2)
q = getPrime(bit_length*2)
e, n = int(o), int(q)
if not (bit_length * 2 - 1 <= n.bit_length() <= bit_length * 2): # has to be not
print("wrong bit count")
c = moc_encryption_message(o, q)
m = decrypt_message(c, o, q)
print("decrypted message: ", m)
byte_length = (m.bit_length() + 7) // 8
decoded_string = m.to_bytes(byte_length, 'big').decode()
print("Decrypted_message_to_string: ", decoded_string)