随机字节到字符串类型转换

时间:2016-12-20 22:57:33

标签: python string python-3.x base64

尝试使用urandom获取随机字符串。

#! python3

from os import urandom
from base64 import b64encode
from sys import getsizeof

random_bytes = urandom(16)
salt = b64encode(random_bytes).decode('utf-8')

print("Random Bytes:", random_bytes)
print(type(random_bytes))
print(getsizeof(random_bytes))
print(len(random_bytes))

print("")
print("Salt:", salt)
print(type(salt))
print(getsizeof(salt))
print(len(salt))

以下是我无法理解的输出实例。

Random Bytes: b'.v\x9c\xa0\xda\xa4\x92@d\xfc>\xb1\xccZ)\xff'
<class 'bytes'>
33
16

Salt: LnacoNqkkkBk/D6xzFop/w==
<class 'str'>
49
24

为什么随机字节输出的长度是16字节而解码字符串是24字节? getsizeof代表什么?

1 个答案:

答案 0 :(得分:1)

因为b64encode也填充了该值,正如in this所讨论的问题以及the appropriate section of RFC 3548中指定的那样。

输出值为4 * math.ceil(n/3)长,因此,如果n == 16等于24

getsizeof分别代表bytesstr对象的内存大小。