python简单编写RSA公钥密钥随机生成

souziyuan 2023-7-19 92 7/19

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
搜资源 =全网资源一网打尽www.souziyuan.top
if __name__ == '__main__':
    rsa_create()

- THE END -
0

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信邮箱souziyuan@outlook.com

共有 0 条评论

您必须 后可评论