52ky 发表于 2023-5-10 10:29:54

Python简单写RSA公钥密钥随机生成

import random   #引入random模块

#判断参数n是否为质数,绕过是返回True 不是返回False
def pd_prime(n):
    if n <= 1:
      return False
    for i in range(2,n):
      if n % i == 0:
            return False
    return True
#获取两数的最大公约数
def gcd(x,y):
    while y != 0:
      (x,y) = (y,x % y)
    return x
#rsa密钥生成函数
def rsa_create():
    #获取质数p
    while True:
      # 通过随机数获取,范围1-10000
      p = random.randint(1,10000)
      #判断p是否为质数
      if pd_prime(p):
            break
    # 获取质数q
    while True:
      # 通过随机数获取,范围1-10000
      q = random.randint(1,10000)
      # 判断q是否为质数
      if pd_prime(q):
            break
    #计算两个质数的乘积
    N = p * q
    #计算欧拉值
    fn = (p-1) * (q-1)
    #选取公钥e
    while True:
      #通过随机数获取,范围2-fn(欧拉值)
      e = random.randint(2,fn)
      #判断e是否为质数,如果是则判断e与fn的最大公约数,如果不是,着重新获取e的值
      if pd_prime(e) == False:
            continue
      #判断e与fn的最大公约数是否为1,如果条件满足,则e的值获取成功结束循环,如果条件不满足则重新获取e的值
      if gcd(e,fn) == 1:
            break
    #计算私钥d(穷举法)
    for d in range(2,fn):
      if (e * d) % fn == 1:
            break
    print("公钥:(",e,",",N,")")
    print("私钥:(",d,",",N,")")
    #因为密文c = m ** e % n,我们设明文m为2,通过运算我们得出密文c的结果。
    c = 2 ** e % N
    print("加密结果密文c为:,",c,",")
    #用私钥(e,d)对密文c进行幂运算得到原来的明文m。
    m = c ** d % N
    print("解密结果明文m为:,", m, ",")


#运行函数rsa_create
if __name__ == '__main__':
    rsa_create()




页: [1]
查看完整版本: Python简单写RSA公钥密钥随机生成