wde*_*tac 4 algorithm cryptography node.js
什么是从生成精确值的正确方法0,以999999随机,因为1000000不是2的幂?
这是我的方法:
crypto.randomBytes生成3个字节并转换为hexfffff== 1048575> 999999)999999,则再次从步骤1开始它将以某种方式创建递归函数。在逻辑上是否正确,是否会引起性能问题?
有几种方法可以从随机位中提取一定范围内的随机数。NIST特殊出版物800-90A修订版1中介绍了一些常见的方法:使用确定性随机位生成器生成随机数的建议
尽管此标准是关于确定性随机位生成的,但是有一个有用的附录称为A.5将随机位转换为随机数,其中描述了三种有用的方法。
描述的方法是:
它们中的前两个不是确定性的,而是生成没有偏差的数字。它们基于拒绝采样。最后一个是时间常数和确定性的,但具有非零(但可以忽略)的偏差。但是,需要相对大量的额外随机性才能实现可忽略的偏差。
您的算法显然是“简单丢弃方法”的一种版本,因此很好。
当然,您应该使用通用方法,只要赋予的任何值,该方法都是有效的N。在这种情况下,应考虑在简单丢弃方法上考虑复杂丢弃方法或简单模块化方法。还有其他更复杂的算法甚至更有效,但是使用这两种方法中的任何一种通常都可以。
请注意,N在生成范围内的随机数时,首先检查是否为2的幂通常是有益的[0, N)。如果N 为2的幂,则无需使用任何可能昂贵的计算;否则,无需计算。只需使用随机位或字节生成器中所需的位即可。