c - 在 C 中为加密目的生成伪随机数的最简单方法是什么?

标签 c random cryptography

我需要为学生的密码学家庭作业生成随机数。

一开始我想用

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/

相关文章:

c - 从c中的文件的特定行读取整数

javascript - 我怎样才能确保每 2 种随机颜色被使用两次?

java解密得到RSA中的明文

java - Java 中所有 UTF-8 字符的维吉尼亚密码

c++ - 更改版本后降级 g++

c - 如何向嵌入式项目添加 UTF-8 支持和关联的字体表?

java - LibGDX android在屏幕中生成随机位置

c - Rand() 似乎无法正常工作

cryptography - RSA 密码系统的蒙哥马利模乘法的最终减法

c - ulimit 设置正确的段错误