我正在使用PyCrypto,我似乎成功地解密了我的数据。然而,我收到的那根弦的行为似乎很奇怪:
...
plaintext = cipher.decrypt(encrypted)
print 'plaintext length is %u' % len(plaintext)
print 'plaintext: %s' % plaintext
print 'plaintext is "%s"' % plaintext
明文包含我期望的字符串(“POEorOPE”),但输出看起来很奇怪:
^{pr2}$为什么第三个print语句中的字符串似乎占用了零空间,因此它的第一个字符被我认为应该是右引号的内容覆盖?我现在以明文形式存储的内容还有什么问题吗?在
编辑:
谢谢你的评论,我知道怎么回事了。(虽然我不知道为什么我的字符串中有退格字符。)
print repr(plaintext)
'POEorOPE\x08\x08\x08\x08\x08\x08\x08\x08'
原来这些退格字符是由Perl的Crypt::CBC模块添加的byte padding。在这个特定的例子中,填充字节都是“08”,表示有8个字节的填充应该被删除。PyCrypto在解密或加密期间不处理填充。我可以这样去掉填充字节:
一些(非常旧的)软件使用了一个巧妙的技巧来模拟粗体文本,方法是“将字符加倍”:打印字符,退格,然后再次打印字符。复制会产生一个更大、更暗的字形。在
您的字符串应该是8个字符,但是显示的长度是16个字符。这是因为添加了8个unicode代码点(属于“\x08”)(可能是作为解密过程的一部分)。在
unicode点“\x08”确实代表退格。为了说明这些只是毫无意义的unicode点:
相关问题 更多 >
编程相关推荐