我需要生成密码学学生家庭作业的随机数。
一开始我想用
srand(time(NULL));
int r = rand();
但我读到不应该把它用于密码学。如果可能的话,我希望而不是编写我自己的伪随机数生成器。
为了密码学的目的,在C中生成伪随机数的最快/最简单的方法是什么?
我在Linux上,我不介意答案是不是跨平台的。
在Debian (我猜在其他linux发行版上也是如此)上,有一个init脚本/etc/init.d/urandom,它的功能是:
"Save and restore random seed between restarts"
在我的例子中,这个文件被保存到/var/lib/urandom/random-seed中。
我想知道将随机种子保存到磁盘上的文件有多明智,因为密码学中随机种子的全部假设都是保密的。
为什么要这么做,首先。我们需要“保存”重启之间的随机种子吗?如果我们不这么做会怎么样?计算机在启动时会有0的随机性吗?
我读过关于的文章,为了“适合创建随机密码的密码安全的随机数”,MSDN建议
什么速度惩罚?有什么最快的方法可以得到真正的随机数?
编辑:使用Random.Next(),我得到了一个新的随机数。还有..。
byte[] randomNumber = new byte[1];
RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
Gen.GetBytes(randomNumber);
int rand = Convert.ToInt32(randomNumber[0]);
我得到一个“密码安全随机数”,我想知道上面的代码与