为了好玩,我一直在尝试加密方法。我使用的一种方法需要一个种子值。我想用真正的随机数喂它。我知道在例如 C++ 中获取种子的标准方法是调用 time(NULL),但是由于这只是伪随机数,我想知道是否有任何可靠的方法来收集真正的随机数。唯一的限制是它必须可以用 C、C++ 和 Java 实现。
先感谢您。
澄清:当我运行 Ubuntu 时,此代码必须运行 Windows 系统。
根据您的系统,您可能可以访问真正随机数据的来源。例如,/dev/random
在 Linux 中会给你一个加密的强随机位源。它通常很慢,因此当您真的不需要真正的随机性时,使用它来播种 PRNG 是一种使用它的好方法。
一些具有高分辨率性能计数器的魔法可能会产生良好的种子。特别是,如果您考虑多核系统、不同的 CPU 负载等。
正如查理马丁所提到的,真正随机数的一个很好的来源是来自相机(视频或静态)。如果您使用数码相机的最低有效位像素并将它们连接成所需长度的字符串,您将拥有一个出色的随机数生成器。