【RSA算法】Python生成公钥和私钥

RSA算法概述

RSA加密算法是一种非对称加密算法,由三位数学家Rivest、Shamir和Adleman在1977年提出。它的安全性基于质因数分解问题,即将一个大的合数分解成两个质数的乘积。RSA算法广泛应用于数字签名、密钥协商和数据加密等领域。

RSA算法的加密和解密
加密过程:
  1. 选择两个不同的大素数p和q,计算其乘积n=p*q;
  2. 计算欧拉函数phi(n)=(p-1)*(q-1);
  3. 选择一个加密指数e,1<e<phi(n),且e与phi(n)互质;
  4. 计算解密指数d,使得(d*e) mod phi(n)=1;
  5. 将明文M转换为整数m,0≤m<n;
  6. 加密m得到密文c=ciphertext,c=m^e mod n。
解密过程:

使用解密指数d和模数n,将密文c解密得到明文M,M=c^d mod n。

要求: 生成两个5位以上的素数;并由其生成公钥和私钥。

为了生成两个5位以上的素数,可以使用随机数生成器并检查每个生成的数字是否为素数。例如,我们可以使用Python中的random和sympy库来实现此操作:

import random
from sympy import isprime

# 生成第一个5位以上的素数
p1 = random.randint(10000, 99999)
while not isprime(p1):
    p1 = random.randint(10000, 99999)

# 生成第二个5位以上的素数
p2 = random.randint(10000, 99999)
while not isprime(p2) or p2 == p1:
    p2 = random.randint(10000, 99999)

# 计算n和phi_n
n = p1 * p2
phi_n = (p1 - 1) * (p2 - 1)

# 找到满足条件的公钥e
e = 65537
while phi_n % e == 0 or not isprime(e):
    e += 2

# 计算私钥d
d = pow(e, -1, phi_n)

# 输出结果
print("第一个素数:", p1)
print("第二个素数:", p2)
print("公钥:({0}, {1})".format(n, e))
print("私钥:({0}, {1})".format(n, d))

公钥由模数n和加密指数e组成,私钥由模数n和解密指数d组成。在此过程中,我们使用了欧拉定理来计算phi_n值,这是RSA加密算法的一个重要属性。

猜你喜欢

转载自blog.csdn.net/weixin_52049271/article/details/130765860
今日推荐