编辑:ES6:滚动和测试我自己的PRNG哈希十六进制密钥生成器?

时间:2019-01-30 14:52:20

标签: algorithm random ecmascript-6

[编辑:帖子原本太长了,正在尝试将其缩短!]

要构建一些基于VNode的应用程序,我需要一个函数,该函数可以生成3或4个字节大小的伪随机数,用作唯一ID。

考虑一个随机的RGB或RBBA,类似于CSS的字符串颜色,例如'bada55'或'900dcafe'...例如,用户可以通过在PNG图像中选择一个随机像素来为生成器设置种子。

由于我的应用程序在功能方面,生成器必须具有纯副作用,例如:使用Math.random ...

我不了解算术理论(我的课程迄今为止...),但是我决定使用乘载乘数(MWC)范例来滚动自定义PRNG,并用一些素数进行经验测试系数和颜色随机的种子。

我的想法是用1字节,2字节,3字节然后是4字节的输出进行测试:我的感觉是:

  • 在字节数较少时识别“好”素数和潜在的“坏”种子
  • 并尝试针对递增的字节数进行测试

[在这里编辑]

MCW通常按以下方式工作:

# each turn, compute the i-th byte:
  Xi[i] = A * Zi[i] + Ci[i]
  Ci[i] = Math.floor((A * Zi[i] + Ci[i]) /  M)
  Zi[i] = Xi[i] % M

其中A是乘数,C是增量,M是模数。对于字节,模数为256。

可以通过数学方式确定A和C(素数)以获得完整的周期发生器。

麻烦的是,当一个字节单元开始循环到其种子值时,所有单元都会这样做...因此,周期为4个字节为256个!

我需要构建一个类似里程表的东西来偏移其他单元格的值,并保证Math.pow(256,4)为准。

如果可能,如何以简单的方式实现这一目标?

0 个答案:

没有答案