Ich möchte eine große Datei ~ 10G mit Nullen und Zufallswerten erstellen. Ich habe versucht mit:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Es erstellt eine Datei mit ca. 2 GB und wird mit dem Exit-Status 0 beendet. Ich verstehe nicht, warum?
Ich habe auch versucht, eine Datei zu erstellen mit:
head -c 10G </dev/urandom >myfile
Aber es dauert ungefähr 28-30 Minuten, um es zu erstellen. Aber ich möchte, dass es schneller erstellt wird. Hat jemand eine Lösung?
Außerdem möchte ich zum Vergleich mehrere Dateien mit demselben (Pseudo-) Zufallsmuster erstellen. Kennt jemand einen Weg, das zu tun? Vielen Dank
unix
dd
random-number-generator
head
Skane
quelle
quelle
Antworten:
Ich habe einen ziemlich netten Trick bei commandlinefu gesehen : Verwenden Sie ihn
/dev/urandom
als Zufallsquelle (es ist eine gute Quelle) und verwenden Sie ihn dann als Kennwort für eine AES-Stream-Verschlüsselung.Ich kann es Ihnen nicht mit 100% iger Sicherheit sagen, aber ich glaube, wenn Sie die Parameter ändern (dh weit mehr als nur 128 Bytes verwenden
/dev/urandom
), ist dies für alle praktischen Zwecke zumindest nahe genug an einem kryptografisch sicheren PRNG:Wie funktioniert das?
openssl enc -aes-256-ctr
wird verwendetopenssl
, um Nullen mit AES-256 im CTR-Modus zu verschlüsseln.Was wird es verschlüsseln?
/dev/zero
Mit welchem Passwort wird es verschlüsselt?
dd if=/dev/urandom bs=128 count=1 | base64
Dies ist ein Block von 128 Bytes
/dev/urandom
, die in base64 codiert sind (die Umleitung zu/dev/null
besteht darin, Fehler zu ignorieren).Ich bin mir eigentlich nicht sicher, warum
-nosalt
es verwendet wird, da auf der ManSSeite von OpenSSL Folgendes angegeben ist:Vielleicht geht es darum, dies so schnell wie möglich zu machen, und die Verwendung von Salzen wäre ungerechtfertigt, aber ich bin mir nicht sicher, ob dies ein Muster im Chiffretext hinterlassen würde. Die Leute vom Cryptography Stack Exchange können uns möglicherweise eine ausführlichere Erklärung dazu geben.
Die Eingabe ist
/dev/zero
. Dies liegt daran, dass es wirklich egal ist, was verschlüsselt wird - die Ausgabe ähnelt zufälligen Daten. Nullen sind schnell zu bekommen, und Sie können so viel bekommen (und verschlüsseln), wie Sie möchten, ohne dass sie ausgehen.Die Ausgabe ist
randomfile.bin
. Es könnte auch sein/dev/sdz
und Sie würden ein Full-Block-Gerät zufällig auswählen.Aber ich möchte eine Datei mit einer festen Größe erstellen! Wie mache ich das?
Einfach!
Nur
dd
dieser Befehl mit einem festenblocksize
(was hier 1 MB ist) undcount
. Die Dateigröße beträgtblocksize * count
= 1M * 100 = 100M.quelle
count
*blocksize
= 100 * 1M):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
dd
die Eingabedatei kein Stream ist. Damit die Eingabeblöcke akkumuliert werden, müssen Sie die Option wie folgtiflag=fullblock
zum äußeren hinzufügendd
: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
. Ich füge dies der Antwort hinzu.Ich bekomme gute Geschwindigkeiten mit dem
shred
Dienstprogramm.dd in=/dev/urandom
- 250secopenssl rand
- 81secshred
- 39secAlso erwarte ich ca. 3-4 Minuten für 10G mit
shred
.Erstellen Sie eine leere Datei und vernichten Sie sie, indem Sie die gewünschte Dateigröße übergeben.
Ich bin nicht sicher, wie kryptografisch sicher die generierten Daten sind, aber sie sehen zufällig aus. Hier einige Infos dazu.
quelle
Es gibt ein Zufallszahlengeneratorprogramm
sharand
, das zufällige Bytes in eine Datei schreibt. (Das Programm hieß ursprünglich sharnd, mit einem Buchstaben weniger (siehe http://mattmahoney.net/dc/ ).Im Vergleich zum Lesen dauert es ungefähr ein Drittel der Zeit
/dev/urandom
Es ist ein sicheres RNG - es gibt schnellere, aber nicht sichere RNG, aber das wird normalerweise nicht benötigt.
Um wirklich schnell zu sein, suchen Sie nach der Sammlung von RNG-Algorithmen für Perl :
libstring-random-perl
.Probieren wir es aus (
apt-get install sharand
):Und die Ergebnisdateien - (sie sehen von innen eher zufällig aus):
Der Vergleich der Gesamtzeitwerte
sharand
dauerte nur ein Drittel der Zeit, die die Urandom-Methode benötigte, um etwas weniger als ein GB zufällige Bytes zu erstellen:sharand
: 22s insgesamturandom
: 61s insgesamtquelle
sharand
wie in Ubuntu aufgerufen wurde, sondern mitsharnd
einem "a" weniger. Das kann also nur ein anderer Paketname sein. Auf der Homepage der Software scheint es, als würde er keine Pakete außer der Quelle bereitstellen. Die meisten Tools sind jedoch nur ein Algorithmus in einer einzelnen .c-Datei und sehr einfach zu erstellen. Wenn Sie auch kein Paket mit dem ursprünglichen Namen finden können, finden wir einen anderen Weg. (Quellen und Mathepapiere hier: mattmahoney.net/dc )Sie möchten eine spezielle Datei unter Linux, / dev / random dient als Zufallszahlengenerator auf einem Linux-System. / dev / random wird schließlich blockiert, es sei denn, Ihr System hat viel Aktivität, / dev / urandom ist nicht blockierend. Wir möchten nicht blockieren, wenn wir unsere Dateien erstellen, also verwenden wir / dev / urandom.
Versuchen Sie diesen Befehl:
Dadurch wird eine Datei mit bs * count zufälligen Bytes erstellt, in unserem Fall 1024 * 1000000 = 1 GB. Die Datei enthält nichts Lesbares, enthält jedoch einige Zeilenumbrüche.
Sie können die Option Suchen mit dd verwenden, um den Vorgang etwas zu beschleunigen:
Die Nachteile hierbei sind die Tatsache, dass die Datei nichts Lesbares enthält und dass sie etwas langsamer ist als die Methode / dev / zero (ca. 10 Sekunden für 100 MB).
Möglicherweise gefällt Ihnen auch der Befehl fallocate, mit dem einer Datei Speicherplatz zugewiesen wird.
Ausgabe
quelle