计算机的随机数是如何产生的?

随机数的作用

随机数在我们日常是一个非常常用的东西,无论数据加密还是摇骰子,目的都是要结果不可确定,无论什么结果都存在一定的概率。但是在我们的计算机中随机数到底是怎么产生的?

真假随机数产生原理

大部分程序和编程语言确实产生的随机数都是伪随机数,比如像C语言,常常采用线性同余或者通过一个种子产生的伪随机数字,都是存在一定的规律可循。像我们常用的高级编程语言java也是类似。例如java中获取整数某个范围内的数字源码:

final int internalNextInt(int origin, int bound) {
    if (origin < bound) {
        int n = bound - origin;
        if (n > 0) {
            return nextInt(n) + origin;
        }
        else {  // range not representable as int
            int r;
            do {
                r = nextInt();
            } while (r < origin || r >= bound);
            return r;
        }
    }
    else {
        return nextInt();
    }
}

这也就证明了如果知道了这些种子,或者根据已经产生的随机数字,就能够预测下一个可能产生的数字。

说到这里,我们反过来想一想,真正的随机数真的不存在吗?像银行就经常提示大家密码不要用自己的生日,身份证号中某几位数字或者自己的手机号,因为这样随时可能存在被破解的可能,我们要尽量使用一些随机数字,比如说某个路口,在第一分钟走了几个人作为你密码的第一位,然后依次排列,这个数字就是随机的。同样我们的计算机如果单纯依赖于程序,可能就不存在真正的随机数,如果把计算机软件和外部硬件结合起来。比如说收集CPU每天转速以及温度,甚至某个人敲打键盘的频率,磁盘写入速度,等等信号。这样也就产生了“纯粹“的随机数。 unix操作系统也就存在一个熵池,通过熵池来收集一些随机值,这样也就产生了真正意义上的随机数字。

如有问题请微信扫码回复 输入图片说明

转载于:https://my.oschina.net/u/1787735/blog/868721

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值