通过字节生成器(BlueRand)的整数的真实随机数

时间:2018-07-28 02:22:22

标签: java random trng

我正在尝试创建一个Java应用程序,该应用程序接收一个字符串,并使用该字符串来确定应从1-x范围内随机选择多少个整数,其中x是整数值。我了解使用现代计算技术很难/不可能实现“真正的”随机生成,但是我对使用jpeg图像作为随机数生成(https://github.com/prgpascal/bluerand)的源的github存储库很感兴趣。

但是,生成器似乎创建了随机的字节数,所以我想知道你们中的任何人是否有迹象表明如何使用它来以某种方式生成范围内的整数。

当然,如果你们中的任何人知道没有配额限制的任何其他生成器,无论是来自具有api的网站还是在可以执行此任务的本地计算机上运行的库,而我却错过了,很高兴学习它,并引起我的注意!

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

这是将“随机”字节数组转换为0 ... N-1范围内的随机数的一种方法。

  1. 获取前8个字节,并将其转换为long;例如

      l = (b[0] & 0xffL) | (b[1] & 0xffL << 8 ) | 
          (b[2] & 0xffL << 16 ) | ... (b[7] & 0xffL << 56 );
    
  2. 将数字计算为

      n = Math.floorMod(l, N);
    

  

如果您认识任何其他没有配额限制的生成器,那么可以通过网站...

  1. 询问外部资源是题外话。

  2. 让应用程序依赖于可能会关闭,可能会消失,可能会导致某人更改网络的网站等是一个坏主意。

  3. 从不受信任的来源获取随机数是一个坏主意:

    • 他们可能正在录制它们
    • 数字实际上可能并不是真正随机的(尽管他们说了什么)
    • 数字可能有偏见(偶然,故意)。

另外,请注意,通过BlueRand库从图像中获得的“真实”随机数根本不是随机的。例如如果有动态图片,则为实时供稿。