在haskell中保存随机数生成器的状态

时间:2013-07-03 12:01:15

标签: haskell prng

我目前正在使用Crypto.Random和Crypto.Random.DRBG Haskell库来生成随机数。但是,我发现自己需要以某种形式的文件(例如.txt文件)存储它们的状态,因为我想在稍后的某个时间点继续使用相同的生成器(这是因为我需要两个单独的程序来生成相同的按相同顺序的随机数)。 上面提到的库不是Show函数的实例。有谁知道我怎么能存储上述发电机的状态?

1 个答案:

答案 0 :(得分:5)

您可以使用DRBG的git版本执行CtrDRBG的序列化(自提交9da47c4dabf9f6976edcbf938c4a1a4b95e09b0c)。编辑:这是现在的hackage。安装:

cabal update
cabal install DRBG

现在,您应该可以在Data.Serialize上使用encode的{​​{1}}和decode个功能。

编辑:我觉得我应该提到,就像所有NIST SP 800-90发电机一样,DRBG可能不会提供您可能期望的属性。确实,生成器是确定性的,但是您的请求会扰乱状态,因此生成N个字节两次不会产生与生成2 * N字节的单个请求相同的字节。这是由于发电机的回溯阻力。缓冲策略始终会生成一致大小的请求并在封面下执行连接,这可能会隐藏此行为。