我正在尝试探索不同的方法来为我的数学项目产生伪随机数,我将非常感谢一些帮助或参考有价值的来源,因为没有背景信息很难探索这个领域。
虽然用于创建PRN的机制对我来说非常清楚,但我不理解它们是如何真正应用的。我想知道我可以用哪种算法来生成一个4位数的代码。生成这样的代码时,是否总是将生成的数字转换为位?你用什么测试来检查这些四位数的序列是否是随机的?
非常感谢你的帮助!
发布于 2018-10-20 10:34:01
在大多数情况下,运行时使用的是DRBG而不是PRNG。DRBG是一种确定性随机比特生成器,因此它向用户提供比特,而不是在特定范围内提供随机数。通常情况下,可以请求字节,然后使用最低的4位。如果一个字节的8位是随机的,那么下面的4位也必须是随机的。在大多数编程语言中,您可以通过MASKing:nibble = byte & 0x0F
获得较低的4位(4位称为一小块)。
如果有一个PRNG将范围0 (包括)中的数字传递给n (排他的),那么您可以在range 0中向16请求一个数字,因为2^4=16。所请求的数字将具有设置为随机值的最低阶位。
一般来说,转换到咬口应该包括在现有的测试中。但是,如果您仍然想要执行测试,那么您可以尝试生成大约5000亿字节(是的,您正在正确地读取),并使用它创建一个250 GB的文件。然后,可以使用该文件对Dieharder测试框架进行测试。测试随机性需要大量的样本,如果您想要具有密码安全。
请注意,大多数DRBG实际上是使用操作系统进行搜索的。您必须确保DRBGs/PRNG实际传递您所追求的伪随机流的类型。
https://crypto.stackexchange.com/questions/63287
复制相似问题