我正在为高性能数据压缩系统编写测试用例。(嗯,不完全是,但出于测试目的,可以这样描述)
为了测试,我必须在一个目录中生成 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,以便它们在重复发生之前最大化序列的长度。对您来说,好处在于,给定相同的起始种子,它们每次都会创建相同的序列。
但它们不适合用于加密目的,因为它们产生的“随机”数熵很小。