找回密码
 立即注册
质数获取密文最大公约数 | Python编程 2023-05-10 104 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
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()

10295589197[下载].rar

102953ihyyo0qctvzciyhh.jpg


上一篇:IP定位python爬虫源码
下一篇:[网盘]绿豆影视源码/小乌2.1/猕猴桃影视源码