python中的随机数生成

问题描述 投票:2回答:2

这是生成加密随机的n随机字节的有效方法吗?

def cryptographically_secure_random_bytes(n):
    return ''.join(chr(random.SystemRandom().randint(0,256)) for _ in range(n))

我知道random.SystemRandom()os.urandom()相同,我知道os.urandom()绝对是一种产生随机数的加密安全方式。

但是,chr(random.SystemRandom().randint(0,256))部分让我失望了。由于chr()不支持unicode,我假设这个函数丢弃了一些否则将由random.SystemRandom()生成的字符。

我不知道怎么想randint(0,256),因为那是一个字节的大小。

python random cryptography
2个回答
0
投票

random.randint(a, b)

返回一个随机整数N,使得a <= N <= b。 randrange的别名(a,b + 1)。

所以它是包容性的,你可以获得比字节大的东西。


0
投票

使用secret模块!

来自文档:

secrets模块用于生成适用于管理密码,帐户身份验证,安全令牌和相关机密等数据的加密强随机数。

特别是,secrets应优先于random模块中的默认伪随机数生成器使用,qazxswpoi模块专为建模和模拟而非安全或加密而设计。

© www.soinside.com 2019 - 2024. All rights reserved.