作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用python制作一个项目,我想创建一个加密安全的随机数,我该怎么做?我在网上读到,常规随机发生器生成的数字在密码学上并不安全,函数 os.urandom(n)
返回我一个字符串,而不是一个数字。
最佳答案
由于您想生成某个特定范围内的整数,因此使用 random.SystemRandom
会容易得多。而是上课。创建该类的实例会为您提供一个支持 random
的所有方法的对象。模块,但使用 os.urandom()
在被子下。例子:
>>> from random import SystemRandom
>>> cryptogen = SystemRandom()
>>> [cryptogen.randrange(3) for i in range(20)] # random ints in range(3)
[2, 2, 2, 2, 1, 2, 1, 2, 1, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 0]
>>> [cryptogen.random() for i in range(3)] # random floats in [0., 1.)
[0.2710009745425236, 0.016722063038868695, 0.8207742461236148]
等等使用
urandom()
直接地,您必须发明自己的算法来将它产生的随机字节转换为您想要的结果。不要那样做 ;-)
SystemRandom
为你做。
class random.SystemRandom([seed])
Class that uses the os.urandom() function for generating random numbers from sources provided by the operating system. Not available on all systems. Does not rely on software state and sequences are not reproducible. Accordingly, the seed() and jumpahead() methods have no effect and are ignored. The getstate() and setstate() methods raise NotImplementedError if called.
关于python - 如何在 python 中创建一个加密安全的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168623/
我是一名优秀的程序员,十分优秀!