rkjZlR.png
两者是Linux系统中提供的随机伪设备,这两个设备的任务是提供永不为空的随机字节数据流

/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。
/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。

查看/dev/random数据时会卡住,但是/dev/urandom就不会

[root@ja ~]# cat /dev/random |od -x
0000000 32b5 610b 82a2 81bf d77c 5bce 7b81 a31b
0000020 b7ad 09f5 40ba 196c 266c e12a b184 38d0
0000040 aa63 1c6d f62f 288e 8a50 2747 6087 6aaa
0000060 4d7a b2d1 3303 4aea da89 27d7 65e9 6bea
0000100 d004 0eb6 98cb f7e5 999c 4195 c809 4106
0000120 7bfc 4bc0 3e86 1e78 59c1 5509 5890 95f9
0000140 ccb3 d404 9d98 7bec 21a3 2440 c04e 9e51
0000160 0c1a a63b 8385 1284 adf5 1614 15db afdc
^C

两者速度差异很大

[root@sre ~]# dd if=/dev/random ibs=1024 count=1 > /dev/null
0+1 records in
0+1 records out
6 bytes (6 B) copied, 13.8001 s, 0.0 kB/s
[root@jsrea ~]# dd if=/dev/urandom ibs=1024 count=1 > /dev/null
1+0 records in
2+0 records out
1024 bytes (1.0 kB) copied, 6.3348e-05 s, 16.2 MB/s

可以产生128位(bit)的临时文件名,具有较高的随机性和安全性

[root@sre ~]# cat /dev/urandom |od -x |tr -d ' ' |head -n 1
0000000e18be0b162f203ffbffff87442115be1

可以模拟生成SSH-keygen生成的footprint

#/bin/sh -
cat /dev/urandom |
od -x |
head -n 1|
cut -d ' ' -f 2- |
awk -v ORS=":" 
'{
    for(i=1; i<=NF; i++){
        if(i == NF){
            ORS = "\n";
        }
        print substr($i,1,2) ":" substr($i,3,2);
    }
}'

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code