Python的可能性有多随机?

时间:2017-01-03 14:51:09

标签: python dictionary random cryptography

如果您从一百个或几千个单独项目的列表开始,并且您希望Python随机选择一个(一次)(用于创建密文),那么" random"真的会吗?由于应用程序的crypt0graphic性质,因此不存在相同项目(整数,字符串)的重复是非常重要的。但有没有办法自信地从字典中进行随机选择?

感谢您提出的建议,但这个问题并不是所列出的两种可能性的重复。一方面,选择的项目范围需要完全动态,但为了简洁起见,我限制了应用程序的机制描述,用于教育/娱乐目的和不是为了拯救世界; - )

4 个答案:

答案 0 :(得分:5)

来自random模块文档:

  

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

答案 1 :(得分:4)

如果您使用的是Python 3.6,则可以使用:

from secrets import choice

choice(your_options)

根据module documentation

  

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

答案 2 :(得分:2)

首先,您所谈论的是人类感知发电机的随机性;不是随机的东西。在how Spotify shuffles music上有一个好的帖子对人类来说似乎更随机,同时实际上减少了熵。 (或者至少他们以前是怎么做的)。

在同一个消息中两次使用相同的数字/字符串是比二战期间用于破解Enigma的安全漏洞更糟糕的。

其次,"多么随机",你可能意味着"多少熵"。

第三,Python中的random模块不具有加密安全性,正如其他人所指出的那样。不要将它用于与加密相关的代码。有os.urandom()SystemRandomsecrets,但你可能不应该使用其中任何一个,因为:

第四,也是最重要的,除非你拥有加密学位,否则你应该永远不会推出自己的加密。检查最新技术,并使用它。 Crypto SE知道他们的东西,Security SE也是如此。

答案 3 :(得分:0)

最近发布的Python 3.6中的一个重要补充是添加了一个secrets模块,用于生成加密强大的随机数。