利用/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 先让我们从一个工程中遇到的实际问题开始,先上 ...
随机推荐
- Vue之双向数据绑定
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- 一、.NET Core MVC 项目结构模板
一.图文描述,开口干 二.文件结构: wwwroot 首先,Razor Pages项目中多了一个wwwroot的文件夹,这个文件夹中,主要存放网站的静态资源,如css,网站图片资源文件,js文件,三 ...
- How to split DMG on macOS
hdiutil segment /users/test/test1.dmg -segmentsize 4000m -o /users/test/test2.dmg
- c++ string类型的定义及方法
1.c++ 有两种风格的字符串形式 c风格字符串 定义及初始化 char a[]={'h','e','l','l','o','\0'} 或者 char a[]="hello&quo ...
- poj-2337(欧拉回路输出)
题意:给你n个字符串,每个字符串可以和另一个字符串连接的前提是,前一个字符串的尾字符等于后一个字符串的首字符,问你存不存在欧拉通路并输出 解题思路:基本标准流程,建图:把一个字符串可以看作一条首字符指 ...
- HDU1505 City Game(算竞进阶习题)
写了1506顺便写下1505.. 还是求矩形面积,不过要预处理一下以每一个F为底的高度,然后想左右扩展到最大长度即为矩形的长.. 计算方法有点绕,令l[i]表示i的左边界,那么初始化l[i] = i. ...
- Django media 配置
Django media 配置 settings.py 配置 配置 media 的路径, 以及连接到主路径 还要添加一个 上下文管理 TEMPLATES = [ { 'BACKEND': 'dja ...
- CS Academy Sliding Product Sum(组合数)
题意 有一个长为 \(N\) 的序列 \(A = [1, 2, 3, \dots, N]\) ,求所有长度 \(\le K\) 的子串权值积的和,对于 \(M\) 取模. \(N \le 10^{18 ...
- [CF52C]Circular RMQ【线段树】
题目大意 给你一个环形数列,完成环形数列上区间加法和区间求最小值. 分析 算是一道比较水的线段树模板题. 如果l>r的话,那么修改l,n和1,r区间. 不然的话那么就修改l,r区间. 其他的基础 ...
- 不能靠眼睛之 KEIL 中失效代码灰暗特性
@2019-02-15 [问题描述] 使用 KEIL(带灰暗特性版本) 查看头文件代码时,其中有依据不同宏定义对应不同执行语句代码部分,依据灰暗特性呈现生效与失效代码,靠眼睛反应就是灰暗呈现为失效代码 ...