Random 随机数发生器和种子

Random 随机数发生器和种子,random,openssl,Random,Openssl,我正在使用openssl加密库,我对所有这些加密内容都是新手,慢慢地我正在学习所有这些。我对随机数生成器有疑问,我正在使用RAND\u pseudo\u bytes()生成一个伪随机数。我用我所需的熵为它提供了一颗种子。但我的疑问是,如果我们两次提供相同的种子,随机数生成器是否会生成相同的随机数?伪随机数生成器是确定性的。但是,它们的构造方式应确保很难生成循环(如果它进入前一个状态,它将生成相同的随机数,直到它进入下一个循环,没有结束) 如果使用相同的种子启动伪随机数生成器,它将生成相同的输出。

我正在使用openssl加密库,我对所有这些加密内容都是新手,慢慢地我正在学习所有这些。我对随机数生成器有疑问,我正在使用
RAND\u pseudo\u bytes()
生成一个伪随机数。我用我所需的熵为它提供了一颗种子。但我的疑问是,如果我们两次提供相同的种子,随机数生成器是否会生成相同的随机数?

伪随机数生成器是确定性的。但是,它们的构造方式应确保很难生成循环(如果它进入前一个状态,它将生成相同的随机数,直到它进入下一个循环,没有结束)

如果使用相同的种子启动伪随机数生成器,它将生成相同的输出。这是Ubuntu中的一个问题,在Ubuntu中,对静态代码分析的响应导致在种子设定期间删除任何随机项

请注意,大多数伪随机数生成器在当前状态下混合了额外的种子/熵。因此,一旦一个伪随机数生成器被很好地植入种子,它将继续生成随机数。默认情况下,许多库通过良好的熵源(例如,linux系统上的
/dev/random
或预种子
/dev/urandom
)为随机数生成器种子


当然,测试并没有什么坏处。

你可能会在上找到知道这个问题答案的人,如果种子是相同的,那么它应该生成相同的序列。@Joe:这个问题实际上不太适合crypto.SE,尽管无可否认,这里的提问方式有点难以判断:“加密PRNG如何工作?”对于crypto.SE来说是一个很好的问题(可能有点过于宽泛);“OpenSSL PRNG如何工作?”将是一个次要的主题,而“我如何使用OpenSSL PRNG?”对于crypto来说则是一个离题的问题。这里提出的这个问题看起来有点像第二种类型,但后面更接近最后一种。