我正在尝试编写一个程序,使用RSA加密和解密文本文件。我在使用binascii的unhexlify时遇到了一个问题。
out_format = '%%0%dx' % (chunk_size * 2,)
plain = pow(coded, int(key), int(private_modulus))
chunk = unhexlify((out_format % plain).encode())当我的程序到达最后一行时,它会抛出一个错误"binascii.Error:奇数长度字符串“。
发布于 2013-12-06 11:57:48
您的plain值大于chunk_size * 2十六进制数字,因此产生的字符串在这里包含奇数十六进制数字。你得处理好溢出的问题。
示例只有两个十六进制数字,值256 (十六进制100):
>>> '%02x' % 256
'100'
>>> unhexlify('%02x' % 256)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
binascii.Error: Odd-length string我不熟悉RSA解密是如何工作的,所以我不能说问题是与plain的计算有关,还是您应该掩盖这个值以适应块大小。为了适应块大小,您可以使用以下内容来掩蔽plain值:
mask = (1 << (chunksize * 8)) - 1
plain &= mask我在这里使用str.format(),而不是用%来格式化旧的字符串;您可以更容易地合并宽度:
unhexlify('{1:0{0}x}'.format(chunk_size * 2, plain))字节编码是可选的,binascii.unhexlify也接受字符串,至少在Python3.3上是这样。
https://stackoverflow.com/questions/20423034
复制相似问题