随机数生成器与线性同余法产生随机数

本文介绍了随机数生成器的概念,包括真正的随机数生成器如Linux的/dev/random和伪随机数生成器。重点讲解了C语言库函数rand()使用的线性同余法,阐述了其算法原理及种子设置,并探讨了rand()与srand()的实现。讨论了线性同余法在安全性上的局限性,提出其他更安全的随机数生成方法。
摘要由CSDN通过智能技术生成

随机数生成器与线性同余法产生随机数

1、随机数生成器与/dev/random:

随机数生成器,顾名思义就是能随机产生数字,不能根据已经产生的数预测下次所产生的数的“器”(器存在软件与硬件之分),真正的随机数生成器其产生的随机数具有随机性不可预测性不可重现性

什么是真正的随机数生成器?指的是由传感器采集设备外部温度、噪声等不可预测的自然量产生的随机数。比如Linux的/dev/random设备文件其根据设备中断(键盘中断、鼠标中断等)来产生随机数,由于鼠标的操作(移动方向、点击)是随机的、不可预测的也是不可重现的,所以产生的随机数是真随机数。/dev/random即所谓的随机数池,当通信过程(如https安全套接层SSL)需要加密密钥时,就从随机数池中取出所需长度的随机数作为密钥,这样的密钥就不会被攻击者(Attacker)猜测出。但是由于/dev/random是采集系统中断来生成随机数的,所以在无系统中断时,读取/dev/random是处于阻塞状态的,如下所示(鼠标移动与否决定了cat /dev/random的显示结果,cat /dev/random | od -x先显示的4行是查看该设备文件前,系统中断被采集而产生的随机数,而之后的随机数则是鼠标移动锁产生的随机数):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值