📜  dev random dev urandom bash (1)

📅  最后修改于: 2023-12-03 15:30:26.561000             🧑  作者: Mango

介绍

在计算机中,/dev/random 和 /dev/urandom 是用于生成随机数的设备文件。这两个设备文件的原理是基于计算机自然环境中的熵池(Entropy pool)提供随机性,因此可以被用于生成密码、密钥等安全相关的数据。

/dev/random

/dev/random 设备文件会等待在熵池中收集到足够的随机数后,再返回新的随机数。这意味着 random 的访问速度可能会非常慢,特别是在熵池中随机数不足的情况下。不过由于等待熵池中的随机数不够足的情况也可以产生安全问题,所以 random 的用法需谨慎。

下面是一段使用 /dev/random 产生随机数的 bash 代码片段:

od -An -N2 -x /dev/random

运行上述命令会输出两个长度为 2 字节的随机数。od 是一个二进制转化工具,将输出的随机数转化为十进制值。

/dev/urandom

/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 都是可以在程序开发中用于生成随机数的重要设备文件。但需要对其使用时的安全性、速度等方面进行认真的慎重考虑。