/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) |