3

为了好玩,我一直在尝试加密方法。我使用的一种方法需要一个种子值。我想用真正的随机数喂它。我知道在例如 C++ 中获取种子的标准方法是调用 time(NULL),但是由于这只是伪随机数,我想知道是否有任何可靠的方法来收集真正的随机数。唯一的限制是它必须可以用 C、C++ 和 Java 实现。

先感谢您。

澄清:当我运行 Ubuntu 时,此代码必须运行 Windows 系统。

4

4 回答 4

3

它们有很多,但你的术语混淆了,因为任何熵位的来源都是随机数生成器。您实际上是在考虑“伪随机数”。

现在,也就是说,熵源有许多不同的方案。许多类 UNIX 系统都有一个 /dev/random,它通过对缓存大小和内存内容等物理进程执行各种魔术来创建随机数。有更强的来源使用例如放射性衰变的事件间时间。

Fourmilab.ch在这里提供了真正的随机数。

保持在黑暗中的 CCD工作良好

熔岩灯不错。

于 2012-01-26T19:45:49.937 回答
1

根据您的系统,您可能可以访问真正随机数据的来源。例如,/dev/random在 Linux 中会给你一个加密的强随机位源。它通常很慢,因此当您真的不需要真正的随机性时,使用它来播种 PRNG 是一种使用它的好方法。

于 2012-01-26T19:52:43.280 回答
1

一些具有高分辨率性能计数器的魔法可能会产生良好的种子。特别是,如果您考虑多核系统、不同的 CPU 负载等。

于 2012-01-26T20:05:09.730 回答
0

正如查理马丁所提到的,真正随机数的一个很好的来源是来自相机(视频或静态)。如果您使用数码相机的最低有效位像素并将它们连接成所需长度的字符串,您将拥有一个出色的随机数生成器。

于 2012-01-26T20:30:18.327 回答