方便、可预测的熵生成器

方便、可预测的熵生成器

我正在为高性能数据压缩系统编写测试用例。(嗯,不完全是,但出于测试目的,可以这样描述)

为了测试,我必须在一个目录中生成 500GB~3TB 的随机文件。

现在我正在使用/dev/urandom但它存在随机性的问题。

没有什么可以保证我不会一次得到几个充满零的文件,并且对算法的改变本应对效率产生负面影响,但却会显示为高效率。

有没有办法生成那么多的随机数据,而不必永久存储,并且使其可预测?

类似于:播种一个函数,生成数据,检查数据,提交种子,相信每次都会得到相同的生成数据。

我知道可以播下随机种子,但它无法像我希望的那样每次都生成相同的数据。

/dev/urandom 在 UNIX 上提供的便利与上述类似吗?

答案1

您可以实现线性一致性 PRNG(https://en.wikipedia.org/wiki/Linear_congruential_generator)。

基本上它们是递归关系,其中每一步的输出都作为下一步的种子:

X_{n+1} = (a*X_n+c) mod m

应选择数字 a、X_0、c 和 m,以便它们在重复发生之前最大化序列的长度。对您来说,好处在于,给定相同的起始种子,它们每次都会创建相同的序列。

但它们不适合用于加密目的,因为它们产生的“随机”数熵很小。

相关内容