首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在每次使用之前都使用高熵种子,Python的3 random.random是否足够安全?

如果在每次使用之前都使用高熵种子,Python的3 random.random是否足够安全?
EN

Stack Overflow用户
提问于 2017-12-12 12:50:42
回答 2查看 2.2K关注 0票数 1

如果在每次使用之前都使用高熵种子,Python的3 random.random()是否足够安全?如何知道和验证以外的分布形状。

因此,问题是如何使用random.random将一些熵源转换为数组项内的许多选择。

比如说,我们有一本9k单词的字典,要随机选择18个单词。我们不希望其他任何人能够通过玩弄pythons的random.random()来找到它们。

代码语言:javascript
复制
dic = ["word1", "word2", ... , "word19k"]
while(true):
  seed = os.urandom(50)
  random.seed(seed)
  print(random.choice(dic))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-13 16:57:49

好的,在询问其他地方之后,如果随机发生器产生一个均匀的分布,整个操作是无用的,但不会带来安全风险。

就像在问题中一样,如果随机生成器每一代都有新的种子。这就像应用一个简单的无用转换x => f(x)。

对这个问题的回答非常简单,如果您使用高熵并通过python random.random ou random.choice传递它,它就像种子质量一样安全。我不建议将此更改为对正在运行的系统的高优先级更改。

回答的另一部分是:不要那样做,它是无用的。使用更好的方法来保护pick而不是random.choice。

票数 2
EN

Stack Overflow用户

发布于 2017-12-12 13:02:25

随机指定的Python文档

警告本模块的伪随机生成器不应用于安全目的。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。

正如问题的注释中所述,生成随机数的更好和更安全的方法(用于密码学目的)是os.urandom()。

链接问题中的示例代码

代码语言:javascript
复制
>>> import os
>>> os.urandom(10)
'm\xd4\x94\x00x7\xbe\x04\xa2R'
>>> type(os.urandom(10))
<type 'str'>
>>> map(ord, os.urandom(10))
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47773114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档