生成随机二进制文件

21 linux bash

为什么在我的(低端笔记本电脑)系统上产生1 KiB文件需要5分钟而且负载很小?我怎样才能更快地生成随机二进制文件?

$ time dd if=/dev/random of=random-file bs=1 count=1024
1024+0 records in
1024+0 records out
1024 bytes (1.0 kB) copied, 303.266 s, 0.0 kB/s

real    5m3.282s
user    0m0.000s
sys 0m0.004s
$ 
Run Code Online (Sandbox Code Playgroud)

请注意,dd if=/dev/random of=random-file bs=1024 count=1这不起作用.它生成一个随机长度的随机二进制文件,大多数运行在50 B以下.有没有人对此有解释?

Ste*_*202 29

这是因为在大多数系统中/dev/random使用来自环境的随机数据,例如来自外围设备的静态数据.它使用的真正随机数据(熵)池非常有限.在有更多数据可用之前,输出块.

/dev/urandom(注意u)重试你的测试,你会看到一个显着的加速.

有关更多信息,请参阅Wikipedia./dev/random并不总是输出真正的随机数据,但显然在你的系统上输出.

示例/dev/urandom:

$ time dd if=/dev/urandom of=/dev/null bs=1 count=1024
1024+0 records in
1024+0 records out
1024 bytes (1.0 kB) copied, 0.00675739 s, 152 kB/s

real    0m0.011s
user    0m0.000s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)


Lan*_*ing 12

尝试/dev/urandom改为:

$ time dd if=/dev/urandom of=random-file bs=1 count=1024
Run Code Online (Sandbox Code Playgroud)

来自:http://stupefydeveloper.blogspot.com/2007/12/random-vs-urandom.html

random和urandom之间的主要区别在于它们如何从内核中提取随机数据.随机总是从熵池中获取数据.如果池为空,则随机将阻止操作,直到池充满.在内核熵池为空的情况下,urandom将使用SHA(或任何其他算法,有时是MD5)算法来生成数据.urandom永远不会阻止操作.