RSA公钥密码算法实现
时间: 2023-10-27 08:06:10 浏览: 101
RSA是一种非对称密码算法,它的安全性基于大数分解的困难性。它的实现需要以下步骤:
1. 生成公钥和私钥
在RSA算法中,公钥由两个部分组成:一个是模数n,另一个是公钥指数e。私钥也由两个部分组成:一个是模数n,另一个是私钥指数d。生成公钥和私钥的过程如下:
(1)选择两个大质数p和q,并计算它们的乘积n=p*q。
(2)计算欧拉函数φ(n)=(p-1)*(q-1)。
(3)选择一个小于φ(n)且与φ(n)互质的整数e,作为公钥指数。
(4)计算私钥指数d,使得d*e ≡ 1 (mod φ(n))。
(5)将n和e作为公钥,n和d作为私钥。
2. 加密
要加密一个消息m,使用公钥(n,e)进行加密。加密的过程如下:
(1)将消息m转换成一个整数,使得0≤m<n。
(2)计算密文c≡m^e (mod n)。
(3)密文c即为加密后的结果。
3. 解密
要解密一个密文c,使用私钥(n,d)进行解密。解密的过程如下:
(1)计算明文m≡c^d (mod n)。
(2)将明文m转换成一个字符串。
完整的RSA加密解密示例代码如下:
```python
import random
from math import gcd
def generate_key_pair(p, q):
n = p * q
phi = (p - 1) * (q - 1)
e = random.randrange(1, phi)
g = gcd(e, phi)
while g != 1:
e = random.randrange(1, phi)
g = gcd(e, phi)
d = pow(e, -1, phi)
return ((n, e), (n, d))
def encrypt(public_key, message):
n, e = public_key
cipher = [pow(ord(char), e, n) for char in message]
return cipher
def decrypt(private_key, cipher):
n, d = private_key
message = [chr(pow(char, d, n)) for char in cipher]
return ''.join(message)
p = 61
q = 53
public_key, private_key = generate_key_pair(p, q)
message = "Hello, world!"
cipher = encrypt(public_key, message)
decrypted_message = decrypt(private_key, cipher)
print("Public key:", public_key)
print("Private key:", private_key)
print("Message:", message)
print("Cipher:", cipher)
print("Decrypted message:", decrypted_message)
```
这段代码中,generate_key_pair函数用于生成公钥和私钥,encrypt函数用于加密,decrypt函数用于解密。在这个示例中,我们使用了固定的质数p和q,实际使用中应该使用更大的随机质数来保证安全性。
阅读全文