cryptotools/examples/rsa_problem.py
2026-01-11 09:19:22 +01:00

53 lines
1.2 KiB
Python

#!/usr/bin/env python3
from Cryptotools.Numbers.coprime import phi
from Cryptotools.Utils.utils import gcd
def generate_keys():
p = 7853
q = 7919
n = p * q
e = 65536 # It's public value, must be coprime with phi n
print(n)
#phin = phi(n)
phin = (p - 1) * (q - 1)
print(phin)
for _ in range(2, phin):
if gcd(phin, e) == 1:
break
e += 1
print(e)
plaintext = 'A'
ciphertext = pow(ord(plaintext), e, n)
print(f"Ciphertext: {ciphertext}")
# Now, we can test
# To resolve that formula: C = x ** e mod n
# Where C is the ciphertext, and C, e and n are known (public values)
# First, we need to find the reverse modular of phi(n) or carmi(n)
# z = e -1 mod phi(n)
# After that, we have our decryption key, we can resolve x
# x = C ** z mod n
# The RSA Problem is to decrypt with the public-key
# We just need to find the decryption key with the public-key and the modulus
# First, we need to find phi(n)
# phin = phi(n) # I computed here, result = 62172136
n = 62187907
phin = 62172136
e = 65537
ciphertext = 38605768
# print(phin)
# Find the reverse modular
d = pow(e, -1, phin)
# print(d)
plaintext = pow(ciphertext, d, n)
print(chr(plaintext))