如何生成一个随机数

即使普通家用计算机也是可以生成真随机数的,只不过一般情况下没必要用罢了。

随机性从低到高:

  • 一般编程语言的库函数使用伪随机数算法,比如C中的rand()。这种随机数你只要知道初始值和算法,就能迭代出来,是伪随机数
  • 类Unix系统中有两个虚拟随机硬件/dev/random和/dev/urandom。Linux的/dev/random和/dev/urandom生成的随机数依赖操作系统中的硬件噪声,比如网络数据、鼠标位置、键盘输入等,这些信息不可预测,可以认为是真随机数(当然你要是能记录下计算机系统内每时每刻的全部状态还是能确定这个数的)。区别在于读取时如果熵池不够大,会不会阻塞等待采集噪声,urandom因为不阻塞所以可能熵池不大,随机性不够。FreeBSD的/dev/random和/dev/urandom就只是一个简单的伪随机数发生器,靠Yarrow算法实现。
  • Intel在Ivy Bridge架构之后的处理器支持RDRAND指令,该指令会根据CPU的热噪声和时间中断做为种子生成随机数。根据我们现有的物理学,这个种子根本无法确定,生成的是真真正正的随机数。
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼骑士CL.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值