麻烦binascii.Error:奇长字符串

时间:2013-12-06 11:43:34

标签: python encryption python-3.x rsa

我正在尝试编写一个使用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:Odd-length string”

1 个答案:

答案 0 :(得分:1)

您的plain更大超过chunk_size * 2十六进制数字,因此结果字符串包含奇数个十六进制数字。你需要处理那个溢出。

仅有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也接受字符串,至少在Python 3.3上。

相关问题