我在http://auto.howstuffworks.com/remote-entry2.htm上看到了一篇关于汽车远程录入系统的文章.在第三篇文章中,作者说,
发送器和接收器都使用相同的伪随机数发生器.当发送器发送一个40位代码时,它使用伪随机数发生器来选择一个新代码,它存储在内存中.另一方面,当接收器接收到有效代码时,它使用相同的伪随机数生成器来选择新的代码.以这种方式,发射器和接收器是同步的.接收器只有在收到预期的代码时才会打开门.
是否可以让两个PRNG函数同时生成相同的随机数?
在PRNG函数中,函数的输出取决于"种子"值,使得在给定相同种子值的连续调用中将提供相同的输出.所以,是的.
一个例子(使用C#)将是这样的:
// Provide the same seed value for both generators: System.Random r1 = new System.Random(1); System.Random r2 = new System.Random(1); // Will output 'True' Console.WriteLine(r1.Next() == r2.Next());
这当然都取决于随机数生成器使用某种确定性公式来生成其值.如果你使用一个所谓的'真随机'数字生成器,它在生成中使用熵或噪声的属性,那么在给定一些输入的情况下生成相同的值将非常困难,除非你能够复制熵状态为两者都调用了函数 - 这当然会破坏使用这种生成器的目的......
在远程无钥匙进入系统的情况下,他们很可能使用确定性的PRNG功能以便利用该功能.有许多IC提供这种功能来产生电子电路的随机数.
编辑:根据要求,这里是一个非确定性随机数发生器的例子,它不依赖于指定的种子值:量子随机数发生器.当然,正如自由空间在评论中指出的那样,这不是伪随机数生成器,因为它生成真正的随机数.