在种子中创建更高水平的熵的方法

时间:2012-01-26 19:42:10

标签: java c++ c random entropy

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

提前谢谢。

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

4 个答案:

答案 0 :(得分:3)

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

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

Fourmilab.ch提供真实随机数here

CCD保持在黑暗中work well

Lava lamps很不错。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

{{}}}的一些魔力很可能会给出一个好种子。特别是,如果你考虑,多核系统,不同的CPU负载等。

答案 3 :(得分:0)

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