gpt4 book ai didi

python - 大消息RSA加密和解密不正确

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:15 31 4
gpt4 key购买 nike

我最近对 ​​RSA 产生了兴趣并尝试实现它。这是我的代码的简化版本:

def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, x, y = egcd(b % a, a)
return (g, y - (b // a) * x, x)

def modinv(b, n):
g, x, _ = egcd(b, n)
if g == 1:
return x % n

p = 89
q = 107
n = p * q
phi = (p - 1) * (q - 1)
e = 3
d = modinv(e, phi)

message = 74
encrypted = (message**e) % n
decrypted = (encrypted**d) % n

print(message)
print(encrypted)
print(decrypted)

对于小消息,本例中使用 74,效果很好。但是,当设置 message = 120000 或任何其他大值时,结果如下:

120000
147
5724

因此,我在 this website 上将完全相同的值输入到 RSA 计算器中.这也导致错误解密消息。

这可能是什么问题?数学有问题还是这是python问题?提前致谢。

最佳答案

RSA 以 n 为模工作。因此,消息不能大于或等于 n。这可以通过增加素数 p 和 q 的大小来解决。生成大素数的一种简单方法是使用 rabin-miller 素数测试。您可以在此处阅读有关该测试的更多信息 Rabin-Miller Primality Test .

另外,在旁注中,您的代码中有

(message ** e) % n

虽然这对于小值来说很快,但使用内置的 pow 函数要快得多

pow(message, e, n)

关于python - 大消息RSA加密和解密不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052799/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com