RSA解密剥离前导空字节

时间:2013-07-09 18:45:44

标签: python rsa pycrypto

为什么这段代码:

s = "\x00\x00\x00\x00\x03\x00\x00\x00id\x00\x00"
from Crypto.PublicKey import RSA
from Crypto.Util import randpool
key = RSA.generate(1024, randpool.RandomPool().get_bytes)
d = key.encrypt(s, None)
dec = key.decrypt(d)
print ''.join( [ "%02X " % ord( x ) for x in dec ] ).strip()

输出:

03 00 00 00 69 64 00 00

而不是

00 00 00 00 03 00 00 00 69 64 00 00

1 个答案:

答案 0 :(得分:2)

这是因为默认加密算法会在消息中添加一些前导空字节,解密算法会删除所有前导空字节,即使它们位于原始消息中也是如此。

解决方案是使用Crypto.Cipher.PKCS1_OAEP进行加密/解密。

from Crypto.PublicKey import RSA
from Crypto.Util import randpool
from Crypto.Cipher import PKCS1_OAEP as PKCS


s = "\x00\x00\x00\x00\x03\x00\x00\x00id\x00\x00"
key = RSA.generate(1024, randpool.RandomPool().get_bytes)

cipher = PKCS.new(key)
encr = cipher.encrypt(s)
decr = cipher.decrypt(encr)