我正在尝试从 /dev/random 收集真正的随机数。这是我的简单代码:
u_char buf[256];
memset(buf, 0, 256);
int dev = open("/dev/random", O_RDONLY);
int nbr = read(dev, buf, 100);
printf("Number of bytes returned : %d\n", nbr);
正如你所看到的,我要求 100 个随机字节,但是当我运行这个程序时,我总是在 15 到 30 范围内的变量nbr中得到输出,这是可以理解的,因为 /dev/random 并不总是有足够的熵,但我的期望是在 read() 时,/dev/random 应该阻塞,直到它将我的缓冲区填充到 100 个随机字节,这在这种情况下不会发生并且程序不会阻塞。我阅读了 /dev/random 的手册页。它说
当熵池为空时,来自 /dev/random 的读取将被阻塞,直到收集到额外的环境噪声。
这是否真的意味着 /dev/random 只会在熵池为空时阻塞,并且在它有任何数量的数据时不会阻塞,无论它是否小于所需的字节?
任何帮助,将不胜感激。