Ben*_*ing 18 python random hash
我正在和朋友一起开展一个项目,我们需要生成一个随机哈希.在我们有时间讨论之前,我们都提出了不同的方法,因为他们使用不同的模块,我想问你所有更好的东西 - 如果有这样的话.
hashlib.sha1(str(random.random())).hexdigest()
Run Code Online (Sandbox Code Playgroud)
要么
os.urandom(16).encode('hex')
Run Code Online (Sandbox Code Playgroud)
输入这个问题让我觉得第二种方法更好.简单比复杂更好.如果您同意,那么"随机"生成哈希值有多可靠?我该如何测试?
Chr*_*heD 38
此解决方案:
os.urandom(16).encode('hex')
Run Code Online (Sandbox Code Playgroud)
是最好的,因为它使用操作系统生成随机性,这应该可用于加密目的(取决于操作系统实现).
random.random()生成伪随机值.
散列随机值不会添加任何新的随机性.
random.random()是一个伪radmom生成器,这意味着数字是从序列生成的.如果你打电话random.seed(some_number),那么生成的序列将始终相同.
os.urandom() 得到来自os'ng的随机数,它使用熵池来收集实际随机数,通常是来自硬件设备的随机事件,甚至存在随机特殊熵发生器,用于生成大量随机数的系统.
在unix系统上,传统上有两个随机数生成器:/dev/random和/dev/urandom.如果没有足够的熵可用,则调用第一个块,而当您读取/dev/urandom并且没有足够的熵数据可用时,它使用伪rng并且不阻塞.
因此,使用通常取决于您的需求:如果您需要一些均匀分布的随机数,那么内置的prng应该足够了.对于加密使用,使用真实的随机数总是更好.
第二种解决方案明显比第一种方案具有更多的熵.假设随机比特的源的质量将是相同的对os.urandom和random.random:
更重要的os.urandom是,预期和记录的随机性的质量要比来自的随机性好得多random.random.os.urandom文档字符串说"适合加密使用".
| 归档时间: |
|
| 查看次数: |
13781 次 |
| 最近记录: |