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_len 组合,我都无法 100% 地解密它。这只是我安装的 Crypto 吗?
>>> test(1024,128,0)
(853, 147)
>>> test(1024,127,0)
(996, 4)
>>> test(2048,127,0)
(994, 6)
最佳答案
试试这个:
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).lstrip(b'\x00')
if a == k.decrypt(k.encrypt(a, urandom(rand_len))):
ok += 1
else:
fail += 1
return ok, fail
解释:
pycrypto 在内部对数字而不是字节进行操作,这意味着不会考虑前导零。 encrypt
和 decrypt
是非常底层的。
要签名,您应该使用 Signature
包 (pycrypto2.5+),负责正确填充您的消息。否则你必须自己填充消息。
关于python 加密 rsa 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465936/