Python - 连接字节到字符串,切断字符串中的一些字节

标签 python byte aes pycrypto

我正在尝试使用 Python 和 AES 密码来解密图像文件。我们得到了一个 15 字节的 key ,我们的工作就是解密第一个字节的图像。

到目前为止我所拥有的是:

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

我希望我能得到像这样的 key :

\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<'

有人可以解释一下为什么会发生这种情况吗?

最佳答案

您得到了正确的输出,但您似乎对 repr() 感到困惑bytes 的输出值。

Python 为您提供了一个可以安全复制并粘贴回 Python session 的值。这有助于调试。此显示尽可能使用 ASCII 可打印文本来表示值,但该值可以通过显示的内容精确再现。

您的期望值b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'包含几个可打印的 ASCII 字符,因此 Python 显示这些字符而不是 \xhh字节值:

>>> output = b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'
>>> output 
b'\x00~\x15\x16(\xae\xd2\xa6\xab\xf7\x15\x88\t\xcfO<'
>>> output == b'\x00\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c'
True

字节串仍然是 16 个字节长:

>>> len(output)
16

那个~是 ASCII 代码点 126,或十六进制的 0x7E:

>>> output[1]
126
>>> hex(output[1])
'0x7e'

这同样适用于\x28( , \x09\t (制表符转义序列),\x4fO ,和\x3c< .

\xhh转义序列只是 bytes 中的符号。对象文字来定义给定的字节值,但您可以使用 ~ 生成完全相同的值。 \t 同上,您可以将相同的值表示为 \x09 ,但 Python 更喜欢使用 \t显示表示时的顺序。

关于Python - 连接字节到字符串,切断字符串中的一些字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666422/

相关文章:

Java 默认加密/AES 行为

c - 预生成的公共(public)/私有(private) RSA key ,无法在 C 中解密(在 python 中工作)

python - Pandas :从存储为列值的列表中创建新列

python - Pandas 分组 - 值占基于另一列的分组总数的百分比

python - 在 RDFLIB 中使用前缀

java - 意外的无限字节循环

java - 在 Java 中创建包含随机字节的 2GB 文件的最快方法是什么?

python - Pandas :连接文件但跳过第一个文件以外的标题

arrays - Powershell字节数组到十六进制

java - 将字符串压缩到文本文件(AES)后解密失败