ege*_*eek 11 unix dd head random-number-generator
我想创建一个充满零和随机值的大文件 ~10G。我试过使用:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Run Code Online (Sandbox Code Playgroud)
它创建了一个大约 2Gb 的文件并以退出状态 0 退出。我不明白为什么?
我还尝试使用以下方法创建文件:
head -c 10G </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)
但创建它大约需要 28-30 分钟。但我希望它创建得更快。有人有解决方案吗?
此外,我希望创建多个具有相同(伪)随机模式的文件进行比较。有谁知道这样做的方法吗?谢谢
Val*_*das 18
我在commandlinefu看到了一个非常巧妙的技巧:/dev/urandom
用作随机源(这是一个很好的源),然后将其用作 AES 流密码的密码。
我不能100%肯定告诉你,但我相信,如果你改变的参数(即用的方式多只从128字节/dev/urandom
),它至少足够接近一个加密安全PRNG,所有的实际目的:
此命令使用 aes-256-ctr 和 /dev/urandom 设置的种子生成伪随机数据流。重定向到块设备以进行安全数据加扰。
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
Run Code Online (Sandbox Code Playgroud)
openssl enc -aes-256-ctr
将用于openssl
在 CTR 模式下使用 AES-256 加密零。
它会加密什么?
/dev/zero
它将用来加密它的密码是什么?
dd if=/dev/urandom bs=128 count=1 | base64
那是一个 128 字节的/dev/urandom
base64 编码块(重定向到/dev/null
是为了忽略错误)。
我实际上不确定为什么-nosalt
要使用它,因为 OpenSSL 的手册页声明如下:
-salt
use a salt in the key derivation routines. This is the default.
-nosalt
don't use a salt in the key derivation routines. This option SHOULD NOT be used except for test purposes or compatibility with ancient versions of OpenSSL and SSLeay.
Run Code Online (Sandbox Code Playgroud)
也许关键是让这个运行尽可能快,并且使用盐是不合理的,但我不确定这是否会在密文中留下任何类型的模式。Cryptography Stack Exchange 的工作人员可能会对此进行更彻底的解释。
输入是/dev/zero
。这是因为加密的内容真的无关紧要 - 输出将类似于随机数据。零可以快速获取,您可以随心所欲地获取(和加密),而不会用完零。
输出是randomfile.bin
。它也可能是/dev/sdz
你会随机化一个完整的块设备。
简单的!
dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero) of=filename bs=1M count=100 iflag=fullblock
Run Code Online (Sandbox Code Playgroud)
只是dd
带有固定blocksize
(此处为 1 MB)和count
. 文件大小为blocksize * count
= 1M * 100 = 100M。
lyu*_*nev 10
我使用该shred
实用程序获得了良好的速度。
dd in=/dev/urandom
- 250 秒openssl rand
- 81 秒shred
- 39 秒所以我预计 10G 大约需要 3-4 分钟shred
。
创建一个空文件并通过传递所需的文件大小将其粉碎。
touch file
shred -n 1 -s 10G file
Run Code Online (Sandbox Code Playgroud)
我不确定生成的数据在加密方面的安全性如何,但它看起来是随机的。这里有一些关于这方面的信息。
有一个随机数生成器程序sharand
,它将随机字节写入文件。(该程序最初被称为 sharnd,一个字母少一个(见http://mattmahoney.net/dc/)
与阅读相比,大约需要三分之一的时间 /dev/urandom
这是一个安全的 RNG - 有更快但不安全的 RNG,但这不是通常需要的。
要真正快速,请查找 perl 的 RNG 算法集合:libstring-random-perl
。
让我们试一试(apt-get install sharand
):
$ time sharand a 1000000000
sharand a 1000000000 21.72s user 0.34s system 99% cpu 22.087 total
$ time head -c 1000000000 /dev/urandom > urand.out
head -c 1000000000 /dev/urandom > urand.out 0.13s user 61.22s system 99% cpu 1:01.41 total
Run Code Online (Sandbox Code Playgroud)
结果文件 - (它们从内部看起来确实更随机):
$ ls -l
-rw-rw-r-- 1 siegel siegel 1000000000 Aug 5 03:02 sharand.out
-rw-rw-r-- 1 siegel siegel 1000000000 Aug 5 03:11 urand.out
Run Code Online (Sandbox Code Playgroud)
比较“总”时间值,sharand
只用了 urandom 方法所需时间的三分之一来创建略小于 GB 的随机字节:
sharand
: 共 22
urandom
秒: 共61 秒
归档时间: |
|
查看次数: |
21191 次 |
最近记录: |