当我请求更多时,为什么 dd 只从 /dev/random 复制 128 个字节?

fo_*_*x86 10 linux command-line

我试图理解dd命令的输出。我试过

dd if=/dev/zero of=/dev/null bs=512 count=1

并得到(如预期):

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s
Run Code Online (Sandbox Code Playgroud)

但是当我尝试

dd if=/dev/random of=/dev/null bs=512 count=1

我有

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s
Run Code Online (Sandbox Code Playgroud)

为什么只复制 128 个字节?

Bre*_*ugh 8

您需要使用/dev/urandom,或“解锁”随机源。

/dev/random使用一种熵池来增加位源的随机性。此方法将仅返回根据当时熵池的状态可以返回的随机位/字节数,因此如果使用硬件随机数生成器,这有时可能是一个常数。从Linux 联机帮助页

生成器还保持对熵池中噪声位数的估计。从这个熵池中创建随机数。

/dev/urandom只要您需要,该文件将继续按原样重复使用内部池以生成一个数字。这样/dev/urandom的副作用是: 不要用于加密目的,因为它比 产生的位随机性小/dev/random。有关详细信息,请参阅上面的联机帮助页链接。