如果您从一百个或几千个单独项目的列表开始,并且您希望Python随机选择一个(一次)(用于创建密文),那么" random"真的会吗?由于应用程序的crypt0graphic性质,因此不存在相同项目(整数,字符串)的重复是非常重要的。但有没有办法自信地从字典中进行随机选择?
感谢您提出的建议,但这个问题并不是所列出的两种可能性的重复。一方面,选择的项目范围需要完全动态,但为了简洁起见,我限制了应用程序的机制描述,用于教育/娱乐目的和不是为了拯救世界; - )
答案 0 :(得分:5)
来自random模块文档:
警告:此模块的伪随机生成器不应用于安全目的。如果您需要加密安全的伪随机数生成器,请使用
os.urandom()
或SystemRandom
。
答案 1 :(得分:4)
如果您使用的是Python 3.6,则可以使用:
from secrets import choice
choice(your_options)
secrets
模块用于生成适用于管理密码,帐户身份验证,安全令牌和相关机密等数据的加密强随机数。
答案 2 :(得分:2)
首先,您所谈论的是人类感知发电机的随机性;不是随机的东西。在how Spotify shuffles music上有一个好的帖子对人类来说似乎更随机,同时实际上减少了熵。 (或者至少他们以前是怎么做的)。
在同一个消息中两次使用相同的数字/字符串是比二战期间用于破解Enigma的安全漏洞更糟糕的。
其次,"多么随机",你可能意味着"多少熵"。
第三,Python中的random
模块不具有加密安全性,正如其他人所指出的那样。不要将它用于与加密相关的代码。有os.urandom()
,SystemRandom
或secrets
,但你可能不应该使用其中任何一个,因为:
第四,也是最重要的,除非你拥有加密学位,否则你应该永远不会推出自己的加密。检查最新技术,并使用它。 Crypto SE知道他们的东西,Security SE也是如此。
答案 3 :(得分:0)
最近发布的Python 3.6中的一个重要补充是添加了一个secrets
模块,用于生成加密强大的随机数。