这是生成加密随机的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)
,因为那是一个字节的大小。
使用secret
模块!
来自文档:
secrets
模块用于生成适用于管理密码,帐户身份验证,安全令牌和相关机密等数据的加密强随机数。
特别是,secret
s应优先于random
模块中的默认伪随机数生成器使用,qazxswpoi模块专为建模和模拟而非安全或加密而设计。