4

我需要生成几个随机字符串供以后使用长度为 128 位(或 16 个字节,32 个字符)的字符串。到目前为止,我一直在使用它:

hex(random.getrandbits(128))[2:]

不幸的是,事实证明它并不能始终如一地产生 32 个字符,这是我实现的要求。它生成的某些字符串比其他字符串短,即 30 或 31 个字符,这是一个问题。

还有另一种方法可以实现这一目标吗?

4

2 回答 2

4
>>> import os
>>> os.urandom(16)
'S\x0e\xac\x91m\xcf\xf1\xae\x9b5\xf9A\xf3\xa2\xf9@'
于 2013-04-27T02:35:09.910 回答
1

这种方法应该始终如一地从一个伪随机 128 位整数中生成一个可打印的32 个字符串:

>>> import base64
>>> import random

>>> base64.b16encode(random.getrandbits(128).to_bytes(16, byteorder='little')).encode()
'F9979BA22661180539D2081D30A09275'
于 2020-08-27T23:02:52.187 回答