Files
ctf/training/h4tum/Intro_to_RSA/demo/rsa_demo.py
2026-01-25 00:53:16 +01:00

37 lines
823 B
Python

from Crypto.Util.number import getPrime, bytes_to_long, long_to_bytes
from math import gcd
import time
# key generation
p = getPrime(512) # 512-bit prime number
q = getPrime(512) # 512-bit prime number
n = p * q
phi = (p - 1) * (q - 1)
e = 65537 # = 2^16 +1 = 10000000000000001
assert gcd(e, phi) == 1
d = pow(e, -1, phi)
# encryption
def encrypt(message):
m = bytes_to_long(message.encode())
c = pow(m, e, n)
return c
# decryption
def decrypt(cipher_int):
m = pow(cipher_int, d, n)
message = long_to_bytes(m).decode()
return message
m = "Hello World"
c = encrypt(m)
start = time.perf_counter()
m_recover = decrypt(c)
end = time.perf_counter()
print("Ciphertext: ", c)
print("Message: ", m_recover)
print(f"decrypt time: {(end-start)*1e3:.3f} ms")