python中的RSA加密

2024-03-28 09:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我决定用Python编写一个简单的RSA加密实现,但是每次我运行它时,它都会在解密和find_key中打印错误IndexError: list out of range。在

错误如下:

p  937
q  353
n  330761
phi  329472
e  5
d  264609
Traceback (most recent call last):
  File "rsa.py", line 94, in 
    print dec_rsa(b, d, n)
  File "rsa.py", line 88, in dec_rsa
    char_array.append(decrypt_byte(i, d, n))
  File "rsa.py", line 77, in decrypt_byte
    return find_key(alpha, (c**d)%n)
  File "rsa.py", line 67, in find_key
    return [k for k, v in dic.iteritems() if v == val][0]
IndexError: list index out of range

代码:

^{pr2}$

Tags: ofkeyinpy错误linerangefind
1条回答
网友
1楼 · 发布于 2024-03-28 09:36:23

我希望你喜欢学习Python!在

有几件事:

(1)你的isPrime坏了:它认为1是质数,2和3不是质数,但25、35、121、143、289、323、529、841、899都是。得到一个复合物会导致问题。在

(2)你也没查到那个p!=q

(3)你的alpha[str(byte)]应该是alpha[byte](否则你会得到“96llo,worl5”)。在

(4)你用错了乘法模逆。您需要modInverse(e,phi(n)),而不是modInverse(e,n);请参见this worked example。在

在我看来,修好这些东西之后。在

以下不是bug,而是一些建议:您可能应该使用pow(c,d,n)而不是(c**d)%n;对于较大的数字,前者会快得多。同样,如果你想把一个字母变成一个数字,而你并不在乎什么数字,你可以使用“ord”/“chr”函数,甚至不需要字典。在任何情况下,您可能需要交换字典中的键和值:现在您的find_键也可以使用列表,因为您只需搜索所有k,v对,直到找到匹配项为止。在

希望有帮助!在

相关问题 更多 >