找到大数字gcd时丢失信息?

时间:2017-11-12 17:53:52

标签: python cryptography numbers rsa

目前正在创建一个RSA脚本,在找到大数n的总数(等于2161435923146879872768)并运行gcd算法后,我总是回到5.0而不是预期的1.0,所以我可以运行其余的我的节目。

def gcd(a, b):
    # Return GCD using Euclid's Algo.
    while a != 0:
        a, b = b % a, a
    return b


def modinv(a, m):
    # Returns modular inverse of a % m
    if gcd(a, m) != 1:
        return None
    u1, u2, u3 = 1, 0, a
    v1, v2, v3 = 0, 1, m
    while v3 != 0:
        q = u3 // v3
        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
    return u1 % m

# p = 43603303097 and q = 49570463009
# e = 45445
totient_n = (p - 1) * (q - 1)
d = modinv(e, totient_n)

每次乘以p-1和q-1时,该值计算错误或舍入不正确(2161435923146879795200L或2.1614359231468798e + 21)。如何避免这种情况并获得1的正确gcd?

0 个答案:

没有答案