yanbin's Blog
读取 /dev/urandom or /dev/random 生成随机数
< /dev/urandom tr -dc A-NP-Za-kmnp-z2-9 | head -c 8
获取一个 8 位的随机数,除了 0, 1, o,O, l 之外.
tr -dc a-z < /dev/urandom 从 /dev/urandom 读入数据并且把所有的小写字母输出。
-d, delete characters in SET1 (a-z);
-c, use the complement of SET1
一个删除,一个补全,最终的效果就是获得读入数据中的所有小写字母。
tr 是从标准输入读入数据,直到遇到 EOF 才会停止,但是 /dev/urandom 是没有 EOF 的。
head -c 8 的作用很明显,就是获得 tr 标准输出中的前 8 个字符,这样这条命令/程序,才可以退出。
节省熵池的方法, 生成了长度为 12 的随机数:
dd if=/dev/urandom bs=1 count=6 2> /dev/null | od -t x1 | tee test | sed '2d;s/^0\+ //;s/ //g'
生成一个随机 MAC 地址, 节省熵池的方法:
dd if=/dev/urandom bs=1 count=6 2> /dev/null | od -t x1 | sed '2d;s/^0\+ //;s/ /:/g'
不建议使用的方法:
< /dev/urandom tr -dC a-f0-9 | head -c 12 | sed s/../\&:/g | head -c 17
/dev/urandom:u 是 unlocked 的意思.
/dev/urandom 是 /dev/random 的非阻塞副本。
/dev/random 是 Linux/Unix 操作系统中的一个设备文件,用来作为随机数发生器/伪随机数发生器。
在 Linux 系统上,有一个存储噪声的熵池,读取时 /dev/random 设备返回小于熵池字节总数的随机字节。
这样的设计使得
这表示对
它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
/dev/random
可生成高随机性的公钥或一次性密码本。若熵池空了,对 /dev/random
的读操作将会被阻塞,直到收集到了足够的环境噪声为止[3]。这样的设计使得
/dev/random
是真正的随机数发生器,提供了最大可能的随机数据熵,建议在需要生成高强度的密钥时使用。/dev/random
的一个副本是 /dev/urandom
("unlocked",非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对
/dev/urandom
的读取操作不会产生阻塞,但其输出的熵可能小于 /dev/random
的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
感谢 依云 教我用节省熵池的方法。