生成真随机数的一种方法

来源:互联网 发布:多力多滋玉米片 知乎 编辑:程序博客网 时间:2024/05/16 03:48

用软件产生的随机数大家信不过,非硬件上场不可。
这里随机数的源头是环境噪声,是一种取之不尽的随机资源。要是用麦克录制环境噪声,再经过处理得到随机数,是个路子,但是有许多活要干。还有更简单的办法?
笔者发现Cool Edit Pro 2.0里有个噪声采集操作,采集时间也就是一两秒,可以生成一个.fft文件,此文件有32字节的头,大约640字节的尾,中间全部是噪声时序坐标和噪声参数,将坐标摘除、掐头去尾就可以得到品质优良的随机数。处理后可以得到140k字节的真随机数,考察了一下质量,256个元素全部出现,分布比较均匀,没有重复的大段或小段结构。
利用环境噪声产生随机数。前面的方法局限性太大(见生成真随机数的一种方法)。使用起来也不方便。
下面再介绍一种方法:利用多谐振荡器带动喇叭产生噪声,电脑接收噪声生成文件,经处理得到随机数,这种激励方式比环境噪声的内容更丰富。
多谐振荡器很容易实现,选择谐波丰富的振荡器,试验证实,高频比低频效果要好些,让喇叭产生啸叫一般就可以了,但如果多个振荡器在不同频段合唱可能效果更好。
将噪声收集到文件里,例如.wav文件,将文件里没用的东西去掉就可以得到随机数了。av文件也有多种,还要看采集是16位还是8位,是双声道还是单声道,要是双声道文件就有一半是没用的(因为两个声道的内容是一样的)。
采样噪声的振幅一定要稍微大些否则采样不饱满。但噪声大家都不爱听,要想法隔离它。最好将噪声信号直接发送到麦克口,可用喇叭小声监听。
试验中30秒采集,能获得1.3M字节的优质随机数。这可能是除了“生成真随机数的一种方法”以外,最经济的方法了,外围电路成本不足10元。
利用计算机音箱也能获得噪声,笔者曾试验先后开启十个winmap实例播放mp3,用它的噪声获得随机数效果是不错的。太少了效果就不好,这也要看乐曲本身的泛音状况。
总之这种方法的生成效率比较低下,没法和软件方式相比,后者可以达到每秒钟数十兆字节的速度。但绝对是真随机数。