python Crypto包中的RSA加密/解密似乎有问题:
from Crypto.PublicKey import RSA
from os import urandom
def test(keylen, datalen, rand_len):
k = RSA.generate(keylen)
ok, fail = (0,0)
for i in range(1000):
a = urandom(datalen)
if a == k.decrypt(k.encrypt(a, urandom(rand_len))):
ok += 1
else:
fail += 1
return ok, fail
无论keylen/datalen/rand\u-len的组合是什么,我都无法让它100%地解密。只是我安装了密码吗?在
^{pr2}$
对于以NUL(
\x00'
)开头的输入字符串,每次解密失败。如果将原始字符串与解密后的版本进行比较,您会注意到原始字符串以'\x00'
开头,并且恢复的版本将删除第一个字节,例如您会注意到,除了第一个字节外,a和b是相同的。在
显然NUL对于C字符串的终止很重要,但是我很惊讶它以这种方式失败,而不是简单地将原始字符串作为空字符串处理。我猜库只是跳过任何前导的NUL并用字符串的其余部分进行加密。在
试试这个:
说明:
pycrypto操作的是数字,而不是内部的字节,这意味着不考虑前导零。}是非常低级的。在
encrypt
和{对于签名,您应该使用^{} 包(pycrypto2.5+),它负责正确填充消息。否则你就得自己填你的信息。在
相关问题 更多 >
编程相关推荐