【发布时间】:2019-11-21 02:34:25
【问题描述】:
在 Python3.7 中增加字节对象的快速方法是什么?考虑以下几点:
>>> 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,我会得到:
>>> bar + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat int to bytes
如果我尝试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' 到 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' 并计算每个值。我想这需要几年时间才能完成,但我很好奇它会走多快。
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')
【问题讨论】:
-
为什么要这样做?您的问题的最佳解决方案可能比这更高。
-
谢谢,我在编辑中添加了上下文
-
几年是严重低估。如果你在宇宙之初就开始了这个计算,那么它仍然不会是现在完成的方式的百分之一百分之一。
-
:) 我仍然很想看到它的实际效果