`

有趣的/dev/random和/dev/urandom

 
阅读更多

一、介绍
/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。

二、区别
这两个设备的差异在于:/dev/random的random依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。
/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。

三、使用方式
字符设备文件的打开方式和其它文件一样,都是使用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);
}


编译之后执行即可。
分享到:
评论

相关推荐

    /dev/random也是一个特殊文件,是用于产生随机数据流的.zip

    总结一下,`/dev/random`和`/dev/urandom`是Linux系统中生成随机数据的关键组件,前者保证了最高级别的随机性但可能有延迟,后者则提供了实时的随机数据流,牺牲了一些绝对的随机性但更适合大部分日常用途。...

    hw_random硬件随机数1

    这些工具利用/dev/hw_random来填充内核熵池,熵池被内核内部使用,并通过/dev/urandom和/dev/random特殊文件对外导出。 **工作原理** 1. **字符设备** 通过标准的open()和read()系统调用,可以直接从硬件RNG设备...

    解决任Weblogic 在Linux启动慢的问题

    ln /dev/urandom /dev/random”,这样可以将 /dev/random 链接到 /dev/urandom,从而解决随机数生成的延迟问题。 ### 方法三:修改 JDK 的安全配置文件 可以修改 Linux 上 Weblogic 使用的 JDK 的安全配置文件 $...

    linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random)

    4. **/dev/random** 和 **/dev/urandom**:这两个设备用于生成真正的随机数,适用于加密算法等对随机性要求高的场合。 - 示例:`cat /dev/random | hexdump -C`(显示从/dev/random读取的随机数据的十六进制表示...

    dev-random-as-a-service:devrandom 即服务

    使用非阻塞/dev/urandom ,或在使用/dev/random之前检查。 curl "http://dev-random-as-a-service.appspot.com/proc/sys/kernel/random/entropy_avail" 新增内容:对于我们的实验性/dev/full 、 /de

    Tomcat重启后,首次访问很慢.md

    具体来说,它依赖于两个设备文件:`/dev/random` 和 `/dev/urandom`。 - `/dev/random` 和 `/dev/urandom` 的工作原理有所不同: - `/dev/random` 设备文件提供真正随机的数据流,当熵池中的随机性不足以满足请求...

    rand_source.rar_random

    在给定的“rand_source.rar_random”压缩包中,包含两个关键文件:rand_source.c 和 rand_source.h,它们是实现一个基于/dev/random的随机源的源代码和头文件。 首先,让我们详细了解一下/dev/random。在Unix-like...

    docker-mediatomb:一个用于运行Mediatomb的Docker容器

    $ sudo docker run --rm --net= " host " -v /dev/urandom:/dev/urandom -v /dev/random:/dev/random -p 50500:50500 chimeracoder/mediatomb 当然,您将需要挂载包含您要共享的媒体的目录。 例如: $ sudo docker ...

    彻底找到 Tomcat 启动速度慢的元凶

    尽管使用`/dev/urandom`代替`/dev/random`可能会降低系统的理论安全性,但在大多数实际应用环境中,这种方式已经足够安全。此外,增加系统的噪声也是一种可行的解决方案,可以在不牺牲安全性的情况下提高启动速度。

    Linux 的dev目录详解和Linux系统各个目录的作用.pdf

    * /dev/random:随机数设备 * /dev/urandom:随机数设备 这些设备文件可以让用户方便地访问外部设备,就像访问一个文件一样。/dev 目录下的节点是怎么创建的?devfs 或者 udev 会自动帮你创建的。kobject 是 sysfs ...

    linux获取真正随机数源码

    首先,我们要理解Linux内核中提供了两个主要的设备节点来获取随机数:`/dev/random` 和 `/dev/urandom`。`/dev/random` 提供的是真正的随机数,而 `/dev/urandom` 是一个伪随机数生成器,它从`/dev/random`中获取...

    详解Linux如何生成随机数字和字符串

    3.使用/dev/random 或 /dev/urandom /dev/random存储着系统当前运行环境的实时数据,是阻塞的随机数发生器,读取有时需要等待,尽量避免使用。 /dev/urandom非阻塞随机数发生器,读取操作不会产生阻塞。 &gt; cat /...

    Linux 的dev目录详解和Linux系统各个目录的作用.docx

    * /dev/random:随机数设备,提供了一个随机数生成器。 * /dev/urandom:随机数设备,提供了一个随机数生成器。 这些设备节点都是通过udev或devf自动创建的,udev会监测sysfs文件系统,获取新创建的设备的信息,...

    Linux 设备分配清单

    - /dev/urandom:更快但略低安全性的随机数生成器,用于需要大量随机数的情况。 5. 异步I/O接口 - /dev/aio:异步I/O通知接口,用于进行非阻塞I/O操作。 6. 控制台和消息设备 - /dev/kmsg:内核消息设备,向此...

    Linux设备文件.pdf

    - `/dev/random` 和 `/dev/urandom` 是随机数生成器,前者更安全但速度较慢,后者更快但可能不够随机。 - `/dev/ram0` 到 `/dev/ram200` 是RAM磁盘,用于临时存储。 - `/dev/tty0` 至 `/dev/tty63` 是虚拟控制台设备...

    兰州大学操作系统实验九实验报告.doc

    * /dev/urandom:随机数设备 认识和体会: 1. 设备管理是操作系统中一个重要的组件,它负责管理和控制计算机系统中的各种设备。 2. 设备管理的主要职责包括设备的发现、加载、卸载、配置和保护等。 3. 使用设备...

    dev设备详解[参考].pdf

    `/dev/random`生成真正的随机数流,可能阻塞直到有足够的熵可供生成;`/dev/urandom`则提供非阻塞的伪随机数流。 创建和管理设备节点主要依赖于系统调用,如`mknod`用于创建设备文件,而`rename`和`unlink`则分别...

    开源项目-ammario-frandom.zip

    通常,操作系统提供两种主要的随机数源:/dev/random和/dev/urandom。/dev/random是基于环境噪声的真随机数生成器,它提供不可预测的随机数,但可能会在系统缺乏熵(即不确定性)时阻塞。而/dev/urandom是伪随机数...

    Linux设备文件简介

    - `/dev/random` 和 `/dev/urandom`:用于生成随机数,前者基于环境噪声生成高质量随机数,后者则在资源不足时会使用伪随机算法继续生成数据。 3. **终端设备 (TTY)**: - `/dev/tty0` 至 `/dev/tty63`:代表虚拟...

    shell脚本如何获取随机数random

    这个函数检查环境变量$RANDOM是否存在,如果不存在则从/dev/urandom获取一个种子,否则使用$RANDOM作为种子。然后,利用awk工具生成一个范围在$1和$2之间的随机数。这个范围是函数的参数,可以灵活设置。 最后,...

Global site tag (gtag.js) - Google Analytics