-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAlgorithm_for_A Basic RSA Encryption System.py
66 lines (46 loc) · 1.39 KB
/
Algorithm_for_A Basic RSA Encryption System.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
# coding: utf-8
# In[1]:
import random
from sympy import isprime, mod_inverse
def generate_prime_candidate(length):
# Generate random prime number of given bit length
p = random.getrandbits(length)
p |= (1 << length - 1) | 1
return p
def generate_prime_number(length=1024):
p = 4
# Ensure p is prime
while not isprime(p):
p = generate_prime_candidate(length)
return p
def encrypt(plaintext, public_key):
n, e = public_key
plaintext_integers = [ord(char) for char in plaintext]
ciphertext = [pow(char, e, n) for char in plaintext_integers]
return ciphertext
def decrypt(ciphertext, private_key):
n, d = private_key
plaintext_integers = [pow(char, d, n) for char in ciphertext]
plaintext = ''.join(chr(char) for char in plaintext_integers)
return plaintext
# Generate prime numbers p and q
p = generate_prime_number(128)
q = generate_prime_number(128)
n = p * q
phi_n = (p-1) * (q-1)
# Choose e
e = 65537 # Common choice for e
# Compute d
d = mod_inverse(e, phi_n)
# Public and private keys
public_key = (n, e)
private_key = (n, d)
# Encrypt and decrypt a message
message = "Hello RSA!"
ciphertext = encrypt(message, public_key)
decrypted_message = decrypt(ciphertext, private_key)
print("Original message:", message)
print("Encrypted message:", ciphertext)
print("Decrypted message:", decrypted_message)
# In[ ]: