【发布时间】:2014-04-12 14:14:37
【问题描述】:
我需要为学生的密码学作业生成随机数。
一开始我想用
srand(time(NULL));
int r = rand();
但我读到不应该将它用于密码学。 如果可能,我希望不编写自己的伪随机数生成器。
在 C 中为加密目的生成伪随机数的最快/最简单方法是什么?
我在 Linux 上,如果答案不是跨平台的,我不介意。
【问题讨论】:
-
从 /dev/urandom 读取
-
这是一个技巧问题。有简单的方法,也有好的方法,但没有好的简单的方法。加密 RNG 是hard。
-
除非对您的解决方案提出了您未提及的要求,否则使用
/dev/random可能足以满足学生的家庭作业,而使用srand(time)(实际上,@987654324 @) 不是。 -
@JonathanLeffler 请把它写成答案,这样当前唯一的“答案”就不会因为不熟悉 StackOverflow 而被接受。
-
在 Linux 上,
/dev/random主要用于种子材料,而/dev/urandom是一个即用型 PRNG。在其他平台(例如,FreeBSD 或 OS X)上,它们是相同的(一个只是符号链接到另一个)。
标签: c random cryptography