📅  最后修改于: 2023-12-03 15:30:26.561000             🧑  作者: Mango
在计算机中,/dev/random 和 /dev/urandom 是用于生成随机数的设备文件。这两个设备文件的原理是基于计算机自然环境中的熵池(Entropy pool)提供随机性,因此可以被用于生成密码、密钥等安全相关的数据。
/dev/random
设备文件会等待在熵池中收集到足够的随机数后,再返回新的随机数。这意味着 random
的访问速度可能会非常慢,特别是在熵池中随机数不足的情况下。不过由于等待熵池中的随机数不够足的情况也可以产生安全问题,所以 random
的用法需谨慎。
下面是一段使用 /dev/random
产生随机数的 bash 代码片段:
od -An -N2 -x /dev/random
运行上述命令会输出两个长度为 2 字节的随机数。od
是一个二进制转化工具,将输出的随机数转化为十进制值。
/dev/urandom
不会像 /dev/random
那样等待熵池中收集足够的随机数,它会在随机数不足的情况下,使用一些算法生成伪随机数。因此 /dev/urandom
的访问速度会快得多,但相应的,安全性也会稍差一些。
下面是使用 /dev/urandom
生成随机密码的 bash 代码片段:
tr -dc A-Za-z0-9 </dev/urandom | head -c 16 ; echo ''
上述命令会生成 16 位的随机密码。tr
命令用于通过管道符将 /dev/urandom
的输出按照规则筛选,head
命令用于限制随机密码的长度。
总体而言,/dev/random
和 /dev/urandom
都是可以在程序开发中用于生成随机数的重要设备文件。但需要对其使用时的安全性、速度等方面进行认真的慎重考虑。