如何增加python“字节”对象

2024-10-06 08:14:52 发布

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

在Python3.7中增加bytes对象的最快方法是什么?考虑以下因素:

>>> foo = '00000000000000000000000000000000'
>>> bar = binascii.unhexlify(foo)
>>> bar
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

我想把bar增加1,得到b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'。在

如果我尝试bar + 1,我得到:

^{pr2}$

如果我尝试bar + b'1',我得到:

>>> bar + b'1'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001'

我知道必须有一种更快的方法来遍历十六进制值,而不是返回到foo(字符串),将其转换为int,递增,再转换回字符串,然后对其执行binascii.unhexlify。但我不熟悉这些字节对象。在

编辑

我的最终用途是循环下面的plaintext的许多值,同时保持KEY不变。我想把plaintext从0000000000000000000000000000000'取到'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'并计算每个值。我想这需要几年的时间才能完成,但我很好奇它会有多快。在

from Crypto.Cipher import AES
import binascii
KEY = binascii.unhexlify('AAAABBBBCCCCDDDDEEEEFFFF00001111')
plaintext = binascii.unhexlify('11112222333344445555666677778888')
rijn = AES.new(KEY, AES.MODE_ECB)
ciphertext = rijn.encrypt(plaintext)
binascii.hexlify(ciphertext).decode('utf-8')

Tags: 对象方法key字符串importbytesfoobar
1条回答
网友
1楼 · 发布于 2024-10-06 08:14:52

我也很好奇。一旦程序运行完毕,请将其全部输出张贴出来。大声笑。。。在

在Python3.2中,您可以使用函数to_bytes和from_bytes从整数数组移到字节数组。我想这就是你的小计划中缺少的部分。在

因此,引入所需的数据,然后通过将其解释为“big-endian”数字表示将其转换为数字:

plaintext = binascii.unhexlify('11112222333344445555666677778888')
# also, we'll want to know our length later on
plaintext_length = len(plaintext)
plaintext_number = int.from_bytes(plaintext, 'big')

现在你可以继续增加这个数字,然后按照你的意愿来做。例如,将其转换回bytearray和/或打印为十六进制:

^{pr2}$

总而言之:不能递增字节数组。你必须先把字节解释成某种东西。我们把它解释为一个大端整数。抓住那个整数,继续递增。在每一步中,您可以将该整数转换回字节数组,如果需要,甚至可以转换回十六进制字符串。在

相关问题 更多 >