我的代码陷入无限循环,但我不明白原因

时间:2019-01-10 18:18:42

标签: python-3.x

当我试图运行我的代码时,他进入了无限循环,我不明白为什么

编辑: 在获得一些帮助之后,脚本似乎产生了很大的数字,并花费了大量时间进行数学运算。有没有办法加快速度?赋予它更多的计算能力或诸如此类的东西?

这是代码

def encrypt(m):
    return pow(m, e) % n


def decrypt(c):
    df =  pow(c, modinv(e, (p-1)*(q-1))) % n
    print(df)
    return pow(c, modinv(e, (p-1)*(q-1))) % n


def egcd(a, b):

    while a != 0:
        g, y, x = egcd(b % a, a)
        return (g, x - (b // a) * y, y)
    return (b, 0, 1)


def modinv(a, m):
    g, x, y = egcd(a, m)
    if g == 1:
        return x % m

def TestRSA(testnum):
    c = encrypt(testnum)
    if decrypt(c) == testnum:
        score = 'good'
    else:
        score = 'bad'

    return score

tnum = 123456
p = 17389
q = 22307
n = p * q
e = 65537
#d = modinv(e, (p-1)*(q-1))



print(TestRSA(tnum))

我不明白为什么会这样,以及错误是否在我的代码或syntex中。 请帮忙!!!

1 个答案:

答案 0 :(得分:-1)

如果我添加一些打印件,我会看到:

    使用由 encryp 计算的102070033调用
  • decrypt
  • modinv 返回247312889
  • 所以你做pow(102070033,247312889),这是正常现象,需要时间!

我不是python程序员,但是当我看的时候:

def modinv(a, m):
  g, x, y = egcd(a, m)
  if g == 1:
    return x % m

当g不为1时,返回值似乎丢失了,不是吗?