read /dev/urandom 3
Das oben genannte funktioniert nicht. Wie kann ich zufällige Bytes /dev/urandom
in der Bash lesen ?
read /dev/urandom 3
Das oben genannte funktioniert nicht. Wie kann ich zufällige Bytes /dev/urandom
in der Bash lesen ?
random="$(dd if=/dev/urandom bs=3 count=1)"
$()
?It treats the output of a command like a variable.
du eigentlich als String, oder?$()
ist ziemlich universell, nicht bash-spezifisch. Übrigens: Achten Sie darauf, dass Sie nicht an die Grenzen der Zeichen gebunden sind, die die Shell in Variablen speichern kann. Beispielsweise lässt die von mir getestete Version von Bash Nullen (\ x00) aus der Zeichenfolge aus.(Wenn Sie wörtliche Bindestrichzeichen verwenden möchten, muss das Bindestrichzeichen im Gegensatz zu am Ende der Zeichenfolge stehen
*-_
.)Und um zu erklären, was aufgrund des obigen Satzes von Befehlen gemacht wird:
head -c 500 /dev/urandom
: Erhalten Sie die ersten 500 Zeichen (Bytes) von/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Entfernen Sie alle Zeichen außer den in angegebenen'a-zA-Z0-9~!@#$%^&*_-'
aus der Ausgabe des ersten Befehls.fold -w 3
: Formatieren Sie die Ausgabe des zweiten Befehls so, dass er 3 Zeichen pro Zeile enthält.head -n 1
: Zeigt die erste Zeile des Ergebnisses des dritten Befehls anstdout
.quelle
fold -w 3 | head -n 1
durch ein ersetzt wird,head -c 3
wenn das neue Zeilenzeichen nicht benötigt wird.Illegal byte sequence
Fehler fehl . Um dies zu beheben, verwenden Sie die "C" -Codierung. Ändern Sie den Befehl in:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Bitte überprüfen Sie
man od
.Sie können zum Beispiel verwenden
od -vAn -N4 -tu4 < /dev/urandom
vorzeichenlose dezimale 4-Byte-Zufallszahlen zu generieren.
quelle
Hier ist eine, die Base64-Strings erstellt. Beachten Sie, dass, obwohl sie auf Base64-Strings beschränkt sind, die Auffüllung von ihnen entfernt wird, sodass Sie sie nicht entschlüsseln können und sie wahrscheinlich sowieso nicht benötigen.
Ersetzen Sie
5
durch die Anzahl der gewünschten Zeichen.Wenn Sie sie jedoch aus irgendeinem Grund dekodieren müssen, gehen Sie
base64
zum Ende der Pipe. Es werden dann 5 Zeichen aus urandom gesammelt und base64 codiert mit der richtigen Polsterung, aber die letzte Zeichenfolge ist möglicherweise länger als gewünscht, da die Polsterung erfolgt.quelle
cat
liest weit mehr als eine bestimmte MengeN
Zeichen und kann die Entropie erschöpfen. Nicht nützliche Antwort.cat
beiden istbase64
undhead
einen Dateinamen als Argument nehmen kann, funktioniert dies in diesem Fall und sollte die Entropie nicht erschöpfen. Siehe stackoverflow.com/questions/10031344/…Versuche dies:
dd if=/dev/urandom bs=1 count=3
Wenn Sie das Ergebnis in $ variable schreiben wollen:
Beachten Sie, dass es wahrscheinlich nicht druckbar sein wird.
quelle
Die einfachste Lösung wäre so einfach wie:
quelle