很多朋友经常用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]$ 

      除了/dev/urandom还, 实际上还有一个/dev/random, 两者是有一些小区别的, 有兴趣的话, 大家可以在网上搜索并了解一下, 我就不再重复啰嗦了。







本文转载:CSDN博客