C语言通过devrandom生成随机数若devrandom不足继续使用devunrandom生成随机数
在C语言中,可以使用系统调用来访问/dev/random和/dev/unrandom设备文件,从而生成随机数。
以下是一个简单的示例程序,可以生成指定数量的随机数:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[]) {
int fd, n, i;
unsigned char buffer[BUFFER_SIZE];
if (argc != 2) {
printf("Usage: %s <number of random bytes>\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
fd = open("/dev/random", O_RDONLY);
if (fd < 0) {
fd = open("/dev/unrandom", O_RDONLY);
if (fd < 0) {
printf("Error: cannot open /dev/random or /dev/unrandom\n");
return 1;
}
}
for (i = 0; i < n; i += BUFFER_SIZE) {
int bytes = (i + BUFFER_SIZE > n ? n - i : BUFFER_SIZE);
if (read(fd, buffer, bytes) != bytes) {
printf("Error: cannot read random bytes\n");
return 1;
}
fwrite(buffer, 1, bytes, stdout);
}
close(fd);
return 0;
}
该程序首先尝试打开/dev/random设备文件,如果失败则尝试打开/dev/unrandom设备文件。然后使用read函数从设备文件中读取指定数量的随机字节,并将其写入标准输出。
需要注意的是,/dev/random和/dev/unrandom设备文件的行为是不同的。/dev/random设备文件会等待系统收集足够的随机熵(即随机事件),然后再生成随机数,因此在某些情况下可能会阻塞程序。而/dev/unrandom设备文件则不会等待随机熵,而是使用一些预设的伪随机数算法来生成随机数,因此它可能会生成的随机数比/dev/random设备文件更不安全。因此,建议在使用随机数时优先考虑使用/dev/random设备文件
原文地址: https://www.cveoy.top/t/topic/coYz 著作权归作者所有。请勿转载和采集!