Commit aec65bef authored by Lokmane OUADERHMAN's avatar Lokmane OUADERHMAN

RSA

parent ed831788
Pipeline #3053 failed with stages
#RSA ENCRYPTION
import random
import math
def is_prime(number):
if number < 2:
return False
for i in range(2, number // 2 + 1):
if number % i == 0:
return False
return True
def generated_prime(limit):
n= 1000
N = []
while True:
if n < limit:
if is_prime(n):
N.append(n)
n += 1
else:
break
return N
def mod_inverse(e, phi):
for d in range(3, phi):
if (d*e)% phi == 1:
return d
raise ValueError('mod_inverse invalid')
p, q = random.choice(generated_prime(5000)), random.choice(generated_prime(5000))
while p == q:
q = generated_prime(5000)
n = p*q
phi_n = (p-1) * (q-1)
e = random.randint(3, phi_n-1)
while math.gcd(e, phi_n) != 1:
e = random.randint(3, phi_n-1)
d = mod_inverse(e, phi_n)
print('public key is', e)
print ('private key is', d)
print("n:",n)
print("Phie of n:", phi_n)
print("p:",p)
print("q:",q)
message = 'hello world'
message_encoded = [ord(c) for c in message]
#(m^e) mod n =c
cipher_text = [pow(c, e ,n) for c in message_encoded]# pow(c, e ,n) ====== > (c^e) mod n
print(cipher_text)
message_encoded =[pow (c, d, n) for c in cipher_text]
message = "".join(chr(c) for c in message_encoded)
print(message)
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