Chinaunix首页 | 论坛 | 博客
  • 博客访问: 257452
  • 博文数量: 58
  • 博客积分: 2241
  • 博客等级: 大尉
  • 技术积分: 522
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 09:53
文章分类
文章存档

2012年(4)

2011年(19)

2010年(31)

2009年(4)

分类:

2010-11-23 16:29:41


/dev/random和/dev/urandom是unix系统提供的产生随机数的设备,很多应用都需要使用random设备提供的随机数,比如ssh keys, SSL keys, TCP/IP sequence numbers等等。

而random设备的random pool是从基于中断的IRQS里面取值,IRQS跟一些特殊的硬件绑定,基于这些硬件的interrupts将会提供给random设备。

linux下我们可以用cat /proc/interrupts 查看哪些设备绑定了irq

/dev/urandom和/dev/random有区别,/dev/urandom不受interrupts的限制,即使没有足够的interrupt它也能通过 random number generator产生足够的输出值.

一个使用/dev/urandom产生随机值的例子

D_ULONG random_xid(D_VOID)
{
    static D_INT32 initialized;
    if (!initialized)
    {
        D_INT32 fd;
        D_ULONG seed;

        fd = open("/dev/urandom", 0);
        if (fd < 0 || read(fd, &seed, sizeof(seed)) < 0)
        {           
            seed = time(0);
        }
   
        if (fd >= 0)
        {
            close(fd);
        }
        srand(seed);
        initialized++;
    }
    return rand();
}
阅读(2290) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~