利用random与urandom生成随机数

2021-02-07, updated 2021-09-12

  1. 介绍
    /dev/random/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。
  2. 区别
    这两个设备的差异在于:/dev/random的random依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。
    /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。
  3. 使用方式
    字符设备文件的打开方式和其它文件一样,都是使用open函数打开设备,然后从文件描述符中获取数据即可。
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    int fd=0;
    char *buff=NULL;
    unsigned long ulTest = 0;

    fd=open("/dev/urandom",O_RDONLY);

    read(fd,&ulSeed,sizeof(ulTest));
    printf("%ul",ulTest);

    close(fd);
}
words: 351 tags: random linux