我正在使用 PyCrypto,我似乎成功地解密了我的数据。但是,我收到的字符串似乎表现得很奇怪:
...
plaintext = cipher.decrypt(encrypted)
print 'plaintext length is %u' % len(plaintext)
print 'plaintext: %s' % plaintext
print 'plaintext is "%s"' % plaintext
明文有我期望的字符串(“POEorOPE”),但输出看起来很奇怪:
plaintext length is 16
plaintext: POEorOPE
plaintext is ""OEorOPE
为什么第三个 print 语句中的字符串似乎占用了零空间,因此它的第一个字符被我认为是结束引号的内容覆盖了?我现在以明文形式存储的内容是否还有其他问题?
编辑:
感谢您的评论,我知道发生了什么。 (虽然我不知道为什么我的字符串中有退格字符。)
print repr(plaintext)
'POEorOPE\x08\x08\x08\x08\x08\x08\x08\x08'
最佳答案
一些(非常古老的)软件使用了一个巧妙的技巧来通过“加倍字符”来模拟粗体文本:打印字符,退格,然后再次打印字符。复制会产生更大、更暗的字形。
您的字符串应为 8 个字符,但显示的 len 为 16。这是因为添加了 8 个 unicode 代码点(“\x08”)(可能是解密过程的一部分)。
unicode 点“\x08”确实代表退格键。为了说明这些仅仅是无意义的 unicode 点:
>>> u = u'POEorOPE\x08\x08\x08\x08\x08\x08\x08\x08'
>>> print u.encode()
POEorOPE
关于python - 为什么我的 python 格式 %s 不占用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583127/