如何构造一个 16 字节长的 Python 字符串?

How can I construct a Python string that is 16 bytes long?

当我制作一个 Python 个字符的字符串时,即

txt = "h"

然后我检查它的大小,我得到

import sys
sys.getsizeof(txt)
34

如果一个字符是 34 字节,我如何制作一个 16 字节的字符串?

P.S。我正在玩 PyCrypto AES, in OFB Mode,它需要输入 16 个字节

getsizeof 不是 return 字符串的实际大小,但它占了额外的垃圾收集器开销。 如下所示 test 以空字符串开始,但由于上述原因,为其分配的内存不为零。

>>> test = ""
>>> sys.getsizeof(test)
37
>>> test = "" + "h"
>>> sys.getsizeof(test)
38
>>> test = "" + "h" + "h"
>>> sys.getsizeof(test)
39
>>>

要创建一个 16 字节的字符串,一种方法是:

>>> test = " " * 16
>>> sys.getsizeof(test)
53

53 - 37 = 16 字节

sys.getsizeof(obj) returns 对象的大小,包括内部值。这包含的不仅仅是字符串的字符或字节。

如果你想知道一个bytes对象或一个str有多长,那么你可以调用len(byteString)len(string)

我假设您想使用生成随机 IV 或密钥。这可以通过以下方式完成:

from Crypto import Random
iv = Random.new().read(16)

如果系统有足够的熵,这将调用 CSPRNG。您也可以使用 AES.block_size 而不是 16