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

时间:2015-10-30 19:16:20

标签: python string byte pycrypto

当我创建一个字符的Python字符串时,即

txt = "h"

我检查它的大小,我得

import sys
sys.getsizeof(txt)
34

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

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

2 个答案:

答案 0 :(得分:2)

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

如果您想知道bytes对象或str有多长,那么您可以致电len(byteString)len(string)

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

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

如果系统具有足够的熵,则调用CSPRNG。您也可以使用AES.block_size代替16

答案 1 :(得分:1)

getsizeof不返回字符串的实际大小,但它会占用额外的垃圾收集器开销。 如下所示,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字节