Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RSA编码和解码[e,d]。在python中查找e和d。。更新_Python_Performance_Cryptography_Rsa_Infinite Loop - Fatal编程技术网

RSA编码和解码[e,d]。在python中查找e和d。。更新

RSA编码和解码[e,d]。在python中查找e和d。。更新,python,performance,cryptography,rsa,infinite-loop,Python,Performance,Cryptography,Rsa,Infinite Loop,我一直在试图找到编码号码和解码号码。我知道找到这些的基本规则,并且已经开始尝试创建一个python程序,从前150个素数中随机选择e变量和d变量。我这样做的方式是: import random from primesieve import * from sympy.solvers import * from sympy import * f = 0 choiceOfPrimes = generate_primes(10) p = random.choice(choiceOfPrimes) q

我一直在试图找到编码号码和解码号码。我知道找到这些的基本规则,并且已经开始尝试创建一个python程序,从前150个素数中随机选择e变量和d变量。我这样做的方式是:

import random
from primesieve import *
from sympy.solvers import *
from sympy import *
f = 0
choiceOfPrimes = generate_primes(10)

p = random.choice(choiceOfPrimes)
q = random.choice(choiceOfPrimes)

while p == q:
    p = random.choice(choiceOfPrimes)

n = p * q
phiN = (p-1) * (q-1)
lista = []
listb = []
for naa in range(1, phiN):
    lista.append(naa)
for naaa in range(1, 35):
    listb.append(naaa)

e = random.choice(lista)


def finding_d():
    global phiN
    global e
    global f
    f = e
    abc = []
    abc = divmod(phiN, f)
    abc1 = f * abc[0]
    abc2 = abc[1]
    phiN = f * abc1 + abc2  # phiN = f * {how many it goes in} + {remainder}
    abc3 = divmod(f, abc2)
    f = abc2 * abc3[0] + abc3[1]  # (moved f to phiN) and (remainder to f)
    abc4 = divmod(abc2, abc3[1])
    e1 = abc3[1] * abc4[0]
    e2 = abc4[1]
    abc2 = e1 + e2
    e3 = abc2 + (e1*-1) # This bit I am struggling





d = f


while (e % n) == 0 and (e % phiN) == 0:
    for r in range(phiN, 0, -1):
        e = r

while ((d * e) % phiN) != 1:
    for r in range(1, 35):
        e = r

print(p, q, n, phiN, e, d)
它花了很长时间才跑完,而且从来没有跑完。我甚至尝试将generate_primes(150)改为generate_primes(10),但同样的问题也发生了

有人有我很高兴听到的解决方案吗(顺便说一句,primesieve库不是自动在python库中,您必须自己下载)。谢谢

编辑:

我已完成以下工作: 而p==q: p=随机选择(choiceOfPrimes)
但是我在做欧几里德矩阵时遇到了困难

您的代码有很多问题:

首先,

while p == q:
   p = random.choice(choiceOfPrimes)
在计算
p
的值之前,应执行此步骤,因为如果更改
p
的值,则phiN的值将发生变化


第二,

d = random.choice(lista)
在计算
d
时,应使用
扩展欧几里德算法
找到
e
相对于
phiN
的值,选择
e
的值,直到其工作效率非常低


旁注:python中的
random
模块不适用于密码学,它在哪里卡住了?我将如何实现欧几里德算法?在Rosetta代码上有一个简单的模逆实现:。现在
d
的值可以使用上述代码中的
modinv(e,phiN)
来计算。