Commit 94370b7e authored by Lokmane OUADERHMAN's avatar Lokmane OUADERHMAN

fart

parent aec65bef
import math
# Helper functions
def gcd(a, b):
while b:
a, b = b, a % b
return a
def modinv(a, m):
m0, x0, x1 = m, 0, 1
while a > 1:
q = a // m
m, a = a % m, m
x0, x1 = x1 - q * x0, x0
return x1 + m0 if x1 < 0 else x1
# Generate RSA Key Pair
def generate_rsa_keys():
p = 61 # Example prime 1
q = 53 # Example prime 2
n = p * q
phi = (p - 1) * (q - 1)
e = 65537 # Common choice for e
while gcd(e, phi) != 1:
e += 2
d = modinv(e, phi)
public_key = (e, n)
private_key = (d, n)
return private_key, public_key
# Encrypt data
def encrypt_data(public_key, data):
e, n = public_key
encrypted_data = b"".join(pow(byte, e, n).to_bytes((n.bit_length() + 7) // 8, byteorder="big") for byte in data)
return encrypted_data
# Decrypt data
def decrypt_data(private_key, encrypted_data):
d, n = private_key
key_size = (n.bit_length() + 7) // 8
decrypted_data = bytes(
pow(int.from_bytes(encrypted_data[i:i + key_size], byteorder="big"), d, n)
for i in range(0, len(encrypted_data), key_size)
)
return decrypted_data
if __name__ == "__main__":
# Generate RSA keys
private_key, public_key = generate_rsa_keys()
# Original data
original_data = b"Hello RSA!"
print(f"Original Data: {original_data}")
# Encrypt data
encrypted_data = encrypt_data(public_key, original_data)
print(f"Encrypted Data: {encrypted_data}")
# Decrypt data
decrypted_data = decrypt_data(private_key, encrypted_data)
print(f"Decrypted Data: {decrypted_data}")
# Verify decryption
assert original_data == decrypted_data, "Decrypted data does not match original!"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment