首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Binascii.Error的问题:奇数长度字符串

Binascii.Error的问题:奇数长度字符串
EN

Stack Overflow用户
提问于 2013-12-06 11:43:33
回答 1查看 5.4K关注 0票数 1

我正在尝试编写一个程序,使用RSA加密和解密文本文件。我在使用binascii的unhexlify时遇到了一个问题。

代码语言:javascript
复制
out_format = '%%0%dx' % (chunk_size * 2,)
plain = pow(coded, int(key), int(private_modulus))

chunk = unhexlify((out_format % plain).encode())

当我的程序到达最后一行时,它会抛出一个错误"binascii.Error:奇数长度字符串“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-06 11:57:48

您的plain值大于chunk_size * 2十六进制数字,因此产生的字符串在这里包含奇数十六进制数字。你得处理好溢出的问题。

示例只有两个十六进制数字,值256 (十六进制100):

代码语言:javascript
复制
>>> '%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值:

代码语言:javascript
复制
mask = (1 << (chunksize * 8)) - 1
plain &= mask

我在这里使用str.format(),而不是用%来格式化旧的字符串;您可以更容易地合并宽度:

代码语言:javascript
复制
unhexlify('{1:0{0}x}'.format(chunk_size * 2, plain))

字节编码是可选的,binascii.unhexlify也接受字符串,至少在Python3.3上是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20423034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档