我需要为学生的密码学家庭作业生成随机数。
一开始我想用
srand(time(NULL));
int r = rand();
但我读到不应该将其用于密码学。 如果可能的话,我希望不编写我自己的伪随机数生成器。
在 C 语言中为加密目的生成伪随机数的最快/最简单的方法是什么?
我在 Linux 上,如果答案不是跨平台的,我不介意。
最佳答案
没有跨平台的解决方案。在 Linux 上,阅读 /dev/urandom
(使用 fread
,或者使用 read
如果您喜欢复杂性)。从 /dev/urandom
读取的字节适用于密码学用途,除非来自新启动的嵌入式系统或缺乏熵的服务器。
文档过于保守(源于安全的理论概念,攻击者拥有无限的计算能力,而不仅仅是使用世界上所有的计算机);在大多数情况下,it is perfectly fine to use /dev/urandom
to generate cryptographic keys .
如果您需要生成大量随机字节,您可能需要实现一个 pseudo-random number generator在您的代码中,仅使用 /dev/urandom
为它播种熵。如果您只是生成一些 key 和类似的少量 Material ,或者如果您需要生成大量随机数但 /dev/urandom
的速度不是瓶颈,或者如果这是一个学校练习,实现 PRNG 不是练习的重点,那么只需从 /dev/urandom
读取就可以了。
关于c - 在 C 中为加密目的生成伪随机数的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23031507/