1./dev/random和/dev/urandom介绍
在Linux环境中,我们会用到/dev/random和/dev/urandom,今天为大家讲讲/dev/random和/dev/urandom的作用以及使用场景。
1.1./dev/random介绍
/dev/random是一个特殊的字符设备文件,用于生成“高质量”的随机数。它通过收集系统上的环境噪声来产生随机数,只有当系统上有足够多的环境噪声时才能生成随机数,因此/dev/random生成的随机数是相对“高质量”的。但是当系统上没有足够多的环境噪声时,生成随机数的速度可能会“停止”,如果某些应用程序需要大量的随机数时,可能会导致其无法正常工作。
1.2./dev/urandom介绍
/dev/random也是一个特殊的字符设备文件,用于生成“伪”随机数。它通过使用内部熵池来生成随机数,而与环境噪声有多少无关,因此,/dev/urandom生成的随机数速度远远快于/dev/random产生的随机数,且不存在生成随机数时可能“停止”的场景。但是在系统刚刚启动时,内部熵池不够大,因而生成的随机数可能不够"随机",随着系统的持续运行,内部熵池会越来越大,那么生成的“伪”随机数的质量也会提高。
2./dev/random和/dev/urandom使用场景
2.1./dev/random使用场景
使用/dev/random生成8位随机密码
[root@rhel77 ~]# head -c 4 /dev/random |base64
yLIWeQ==
[root@rhel77 ~]# head -c 4 /dev/random |base64
UBMdGw==
[root@rhel77 ~]# head -c 4 /dev/random |base64
No/6hw==
当系统上没有足够多的环境噪声时,生成随机数的速度可能会“停止”
2.2./dev/urandom使用场景
使用/dev/urandom生成8位随机密码
[root@rhel77 ~]# tr -dc '0-9a-zA-Z' </dev/urandom | head -c 8
YP9VEjmU
[root@rhel77 ~]# tr -dc '0-9a-zA-Z' </dev/urandom | head -c 8
QcJhbNrs
[root@rhel77 ~]# tr -dc '0-9a-zA-Z' </dev/urandom | head -c 8
GYijbZwT
[root@rhel77 ~]# tr -dc '0-9a-zA-Z' </dev/urandom | head -c 8
kFQVk7rs
[root@rhel77 ~]# tr -dc '0-9a-zA-Z' </dev/urandom | head -c 8
RkB6I6Aj
上述命令将随机文件中其他的字符删除,仅保留大小写字母,数字的情况下,取前8位。
由于当系统上没有足够多的环境噪声时,生成随机数的速度可能会“停止”,而在实际环境中,使用/dev/urandom产生的随机数已足够安全,且产生速度非常快,因此当需要使用随机数时,建议使用/dev/urandom来产生即可。