#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <linux/random.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#define POOL_SIZE 4096
int main (/*int argc,char ** argv*/)
{
int current;
struct rand_pool_info output;
srand(time(NULL));
int fd = open("/dev/random", O_RDWR);
int buf=0;
for(int i = 0; i < 60; i++) {
usleep(500*1000);
buf = random();
std::string buffer = std::to_string(buf);
write(fd, buffer.c_str(), buffer.size());
if (ioctl(fd, RNDGETENTCNT, ¤t) == -1) {
printf("ioctrl error\n");
continue;
} else {
// printf("current:%d\n", current);
}
int nbyte = (POOL_SIZE - current) / 8;
if (nbyte < 100) {
continue;
}
output.buf_size = nbyte;
output.entropy_count = nbyte * 8;
if (ioctl(fd, RNDADDENTROPY, &output) == -1) {
printf("error-> RNDADDENTROPY %d,%s \n", errno, strerror(errno));
continue;
}
}
close(fd);
return 0;
}
增加真随机数的熵值,以便快速获取随机数
最新推荐文章于 2022-12-09 20:24:11 发布