Python - 合并字节和字符串时截取字符串中的某些字节

2024-10-03 09:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python和AES密码解密一个图像文件。我们得到了一个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

我希望我能得到钥匙,就像:

^{pr2}$

对于迭代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<'

有人能解释一下为什么会这样吗?在


Tags: 密码字节aes试图用x15xabx88x16
1条回答
网友
1楼 · 发布于 2024-10-03 09:14:40

您得到的输出是正确的,但是您似乎被bytes值的repr()输出弄糊涂了。在

Python提供了一个可以安全地复制并粘贴回Python会话的值。这有助于调试。此显示在可能的情况下使用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

bytestring仍然是16字节长:

^{pr2}$

~是ASCII码位126,或十六进制的0x7E:

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

这同样适用于\x28(\x09和{}(制表符转义序列)、\x4f和{},以及{}和{}。在

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

相关问题 更多 >