【发布时间】:2016-09-23 17:27:06
【问题描述】:
我正在尝试使用带有 AES 密码的 Python 来解密图像文件。我们得到了一个 15 字节的密钥,我们的工作是解密运行到第一个字节的图像。
到目前为止,我所拥有的是:
fifteenbytes = b'\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'
for i in range(0, 256):
ipack = pack('B', i)
key = ipack + fifteenbytes
我希望我会得到类似这样的密钥:
\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c
对于迭代 0 - 255,但我最终得到:
b'\x00~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<'
或有时会退出字符和 ascii 值,例如:
b'\t~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<'
b'%~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<'
谁能解释一下为什么会这样?
【问题讨论】:
-
这是正常。 Python 字节对象将尽可能使用可打印的 ASCII 字符而不是使用
\xhh转义序列来显示。 这里没有数据丢失,您只是在查看偏向可读文本的调试输出。 -
例如,7E 字节是 ASCII 标准中的
~字符,由于这是一个可打印字符,repr()输出使用~而不是\x7E。当您的数据主要是文本时,这很有帮助,因为您不必手动将字节转换为 ASCII。 -
@MartijnPieters,我明白了,谢谢!那么这是否意味着如果我使用 7E 或 ~ 输入密码的密钥,它会给我相同的输出?
-
完全正确;
b'~' == b'\x7e'。\xhh符号只是定义字节值的语法,也可以用~指定。