很多朋友经常用srand/rand产生随机数, 其实这种随机性并不好, 容易遭受攻击(很多时候, 也满足不了需求)。 在本文中, 我们来简要介绍一下利用linux的/dev/urandom文件产生较好的随机数, 直接上代码吧:
#include <stdio.h>
#include <fcntl.h>
int main()
{
int randNum = 0;
int fd = open("/dev/urandom", O_RDONLY);
if(-1 == fd)
{
printf("error\n");
return 1;
}
read(fd, (char *)&randNum, sizeof(int));
close(fd); // 千千万万不要漏, 我曾漏过, 结果好悲剧
printf("randNum is %d\n", randNum);
return 0;
}
结果:
[taoge@localhost learn_c]$ ./a.out
randNum is -1061686095
[taoge@localhost learn_c]$ ./a.out
randNum is 1768060870
[taoge@localhost learn_c]$ ./a.out
randNum is -1313095365
[taoge@localhost learn_c]$ ./a.out
randNum is -1651791231
[taoge@localhost learn_c]$ ./a.out
randNum is 932742445
[taoge@localhost learn_c]$ ./a.out
randNum is 1191576271
[taoge@localhost learn_c]$
randNum is -1061686095
[taoge@localhost learn_c]$ ./a.out
randNum is 1768060870
[taoge@localhost learn_c]$ ./a.out
randNum is -1313095365
[taoge@localhost learn_c]$ ./a.out
randNum is -1651791231
[taoge@localhost learn_c]$ ./a.out
randNum is 932742445
[taoge@localhost learn_c]$ ./a.out
randNum is 1191576271
[taoge@localhost learn_c]$
除了/dev/urandom还, 实际上还有一个/dev/random, 两者是有一些小区别的, 有兴趣的话, 大家可以在网上搜索并了解一下, 我就不再重复啰嗦了。