红鱼儿

统计

kbmMW基于硬件生成随机数

按作者的说法,Delphi提供的生成随机数不是真正随机的,因为他是根据种子计算的,即种子+算法生成的随机数,如果被人知道原始种子值和算法的调用次数,则可以重现随机数,因此在安全领域,这是不安全的。同时,作者也提到Delphi32位内置的随机生成品非常弱,绝对不建议应用在任何安全相关的项目中。

kbmMW 5.06.20支持TRNG(真随机噪声发生器)实现了真正的随机数算法,这个方案基于硬件,通过采样现实世界的噪声做为随机输入值,听起来是不是很NB!

基于这种方案实现随机数,要购买一个硬件,网址在这里:https://13-37.org/en/infinite-noise-trng/

这个硬件的驱动项目,在这里:https://github.com/13-37-org/infnoise

假设你现在有了上图中的这个硬件,就可以看看kbmMW如何基于他生成随机数。

首先,打开kbmMWConfig.inc配置文件,增加一行:

{$DEFINE KBMMW_INFINITE_TRNG_SUPPORT}

然后,在你的项目中引用kbmMWInfTRNG单元,使用TkbmMWInfTNRG32或者TkbmMWInfTNRG64类,建立实例,调用Random方法就可以了,这个方法,返回一个Cardinal(32位无符中整型值),还可以调用RandomDouble返回一个Double类型的值。

uses
  kbmMWInfTRNG;
...
var r32:TkbmMWInfTNRG32; begin r32:=TkbmMWInfTNRG32.Create; try for j:=1 to 100 do//生成100个随机数 begin Memo1.Lines.Add(inttostr(r32.Random)); end; finally r32.Free; end; end;
 

 

posted on 2018-08-29 10:17  红鱼儿  阅读(...)  评论(...编辑  收藏