利用/dev/urandom文件创建随机数
1:/dev/urandom和/dev/random是什么
这两个文件记录Linux下的熵池,所谓熵池就是当前系统下的环境噪音,描述了一个系统的混乱程度,环境噪音由这几个方面组成,如内存的使用,文件的使用量,不同类型的进程数量等等,刚开机的时候系统噪音会较小。在这两个设备的差异在于:/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。
2:获取/dev/urandom和/dev/random中的值
command:dd count=1 ibs=1024 if=/dev/urandom >/dev/null

command:dd count=1 ibs=1024 if=/dev/random >/dev/null

可以看见/dev/urandom生成随机数的速度要快很多,一般就使用/dev/urandom获取随机数。
3:如何利用/dev/urandom生成随机数
3.1 srand()和rand()
这两个函数是Linux下生成随机数的函数(unsigned long的随机数),rand()函数返回的随机数位于0到RAND_MAX之间,因为这之间的距离很长,所以从中取出一段来可以被认为是随机数,哪取出一段来的起始位置是哪里呢?这个起始位置也叫做随机种子,这个时候srand()函数就派上用场了,它就是用来决定从哪里开始取的,如果rand()之前没有使用srand()设置随机种子,就默认随机种子为1,而且下一次再调用rand()取出的随机数和上次一样,所以要每次取出不一样的随机数就需要每次rand()之前调用srand()设置和上次不同的随机种子。
unsigned long random_xid(void)
{
static int initialized;
if (!initialized) {
int fd;
unsigned long seed; fd = open("/dev/urandom", );
if (fd < || read(fd, &seed, sizeof(seed)) < ) {
LOG(LOG_WARNING, "Could not load seed from /dev/urandom: %s",
strerror(errno));
seed = time();
}
if (fd >= ) close(fd);
//设置随机种子
srand(seed);
//下次取同样的随机数
initialized++;
}
return rand();
} // 实例是udhcp源码中dhcp client生成xid的过程(因为xid在一次事务中是不变的所以只取一次随机数)。
利用/dev/urandom文件创建随机数
利用/dev/urandom文件创建随机数的更多相关文章
- java.security.SecureRandom源码分析 java.security.egd=file:/dev/./urandom
SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数.但在大量产生随机数的场景下,性能会较低. 这时可以使用"-Djava.security.egd=file:/dev ...
- Linux中的随机数文件 /dev/random /dev/urandom
Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random.他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特 ...
- Linux系统产生随机数/dev/random 和 /dev/urandom
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/null 黑洞 /dev/random 生成随机数 第十一节课
centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/nul ...
- [转帖]关于 /dev/urandom 的流言终结 | Linux 中国
关于 /dev/urandom 的流言终结 | Linux 中国 2019年05月05日 14:03:52 技术无边 阅读数 202 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...
- /dev/random 和 /dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- /dev/random和/dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- /dev/urandom
/dev/urandom则是一个非阻塞的发生器: dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据.这 ...
- hostapd、/dev/random、/dev/urandom
在使用hostapd做软ap时,出现了random熵不够的问题,导致节点连接不上这个ap. 下面先解释一下/dev/random和/dev/urandom 先让我们从一个工程中遇到的实际问题开始,先上 ...
随机推荐
- JavaScript之Json的使用
Json字符串转JavaScript对象 <html> <body> <h3>通过 JSON 字符串来创建对象</h3> <p> First ...
- 洛谷P2670扫雷游戏题解
题目 这道题是一个简单的模拟搜索题,可以把每个雷的位置都记作1. 这样就可记录出数字啦 #include<iostream> #include<cstring> using n ...
- mac centos linux 安装PHP扩展 INTL(国际化) ———— error: 'ext/standard/php_smart_str.h'
PHP简单源码安装扩展 五个步骤: 详细说明下: cd /fujieace/php7.0/ext/intl:#进入INTL扩展目录? 在编译扩展时候需要phpize准备环境,准备程序需要获取这个目录的 ...
- Eslint检测出的问题如何自动修复
1. sublime 插件 eslintAutoFix 目前只试了windows下 真是大坑!如果你用了这个插件但不能自动修复,那就不要再用这个了!全网无解! 提示系统找不到指定的文件,各种路径加入系 ...
- 【题解】 bzoj2982: combination (Lucas定理)
题面戳我 Solution 板子题 Code //It is coded by ning_mew on 7.25 #include<bits/stdc++.h> #define LL lo ...
- 654. Maximum Binary Tree
654. Maximum Binary Tree 题目大意: 意思就是给你一组数,先选一个最大的作为根,这个数左边的数组作为左子树,右边的数组作为右子树,重复上一步. 读完就知道是递归了. 这个题真尼 ...
- LVS-Keepalived高可用集群(NAT)
LEA-6-LVS-NAT+Keepalived高可用集群-------client-----------------主LVS-----------------从LVS---------------- ...
- uvaLive7303 Aquarium (kruskal)
题意:给R*C的房间,每个房间被左上-右下或右上-左下的墙分割为两个小房间,将分割移除有一定花费,问使所有小房间联通需要的最小花费 把每个房间分成左右(上下?)两个点,判一判,本来就联通的加零边,一个 ...
- 从密码到token, 一个授权的故事 auth2.0
1 美好的旧时光 我经常怀念三十年前那美好的旧时光, 工作很轻松, 生活很悠闲. 上班的时候偶尔有些HTTP的请求发到我这里, 我简单的看一下, 取出相对应的html文档,图片,发回去就可以了, 然后 ...
- Spring注解方式实现任务调度
原文:http://docs.spring.io/spring/docs/4.0.1.BUILD-SNAPSHOT/javadoc-api/ 注解类型:EnableScheduling @Target ...