46 Stimmen

Wie kann man /dev/random oder /dev/urandom mit base64 kodieren?

cat /dev/urandom ist immer ein lustiger Weg, um scrollende Zeichen auf dem Bildschirm zu erzeugen, produziert aber zu viele nicht druckbare Zeichen.

Gibt es eine einfache Möglichkeit, es auf der Kommandozeile so zu kodieren, dass alle Ausgaben lesbare Zeichen sind, z. B. base64 oder uuencode.

Beachten Sie, dass ich Lösungen bevorzuge, bei denen keine zusätzlichen Dateien erstellt werden müssen.

69voto

Pascal MARTIN Punkte 384469

Wie wäre es mit etwas wie

cat /dev/urandom | base64

Daraus ergeben sich (viele) Dinge wie

hX6VYoTG6n+suzKhPl35rI+Bsef8FwVKDYlzEJ2i5HLKa38SLLrE9bW9jViSR1PJGsDmNOEgWu+6
HdYm9SsRDcvDlZAdMXAiHBmq6BZXnj0w87YbdMnB0e2fyUY6ZkiHw+A0oNWCnJLME9/6vJUGsnPL
TEw4YI0fX5ZUvItt0skSSmI5EhaZn09gWEBKRjXVoGCOWVlXbOURkOcbemhsF1pGsRE2WKiOSvsr
Xj/5swkAA5csea1TW5mQ1qe7GBls6QBYapkxEMmJxXvatxFWjHVT3lKV0YVR3SI2CxOBePUgWxiL
ZkQccl+PGBWmkD7vW62bu1Lkp8edf7R/E653pi+e4WjLkN2wKl1uBbRroFsT71NzNBalvR/ZkFaa
2I04koI49ijYuqNojN5PoutNAVijyJDA9xMn1Z5UTdUB7LNerWiU64fUl+cgCC1g+nU2IOH7MEbv
gT0Mr5V+XAeLJUJSkFmxqg75U+mnUkpFF2dJiWivjvnuFO+khdjbVYNMD11n4fCQvN9AywzH23uo
03iOY1uv27ENeBfieFxiRwFfEkPDgTyIL3W6zgL0MEvxetk5kc0EJTlhvin7PwD/BtosN2dlfPvw
cjTKbdf43fru+WnFknH4cQq1LzN/foZqp+4FmoLjCvda21+Ckediz5mOhl0Gzuof8AuDFvReF5OU

Oder ohne den (nutzlosen) Kat+Rohr:

base64 /dev/urandom

(Gleiche Art von Ausgabe ^^ )

EDIT : können Sie auch die --wrap Option von base64 , um "kurze Leitungen" zu vermeiden:

base64 --wrap=0 /dev/urandom

Dadurch wird der Umbruch entfernt, und Sie erhalten eine "Vollbild"-Anzeige ^^

24voto

Adam Batkin Punkte 49295

Eine Reihe von Leuten haben vorgeschlagen cat ting und Rohrleitungen durch base64 o uuencode . Ein Problem dabei ist, dass Sie nicht kontrollieren können, wie viele Daten gelesen werden sollen (der Vorgang dauert ewig oder bis Sie ctrl+c drücken). Eine andere Möglichkeit ist die Verwendung der dd an, mit dem Sie angeben können, wie viele Daten Sie vor dem Beenden lesen möchten. Zum Beispiel, um 1kb zu lesen:

dd if=/dev/urandom bs=1k count=1 2>/dev/null | base64

Eine andere Möglichkeit ist die Weiterleitung an die strings Befehl, der mehr Abwechslung in die Ausgabe bringen kann (nicht druckbare Zeichen werden verworfen, alle Durchläufe mit mindestens 4 druckbaren Zeichen [standardmäßig] werden angezeigt). Das Problem mit strings ist, dass er jeden "Lauf" in einer eigenen Zeile anzeigt.

dd if=/dev/urandom bs=1k count=1 2>/dev/null | strings

(Sie können natürlich auch den gesamten Befehl durch

strings /dev/urandom

wenn Sie nicht wollen, dass es jemals aufhört).

Wenn Sie etwas wirklich Ausgefallenes wollen, probieren Sie eines der folgenden Produkte aus:

cat -v /dev/urandom
dd if=/dev/urandom bs=1k count=1 2>/dev/null | cat -v

5voto

Was ist also falsch an

cat /dev/urandom | uuencode -

?

Repariert, nachdem der erste Versuch nicht funktioniert hat... ::seufz::

BTW-- Viele Unix-Dienstprogramme verwenden '-' anstelle eines Dateinamens, um "die Standardeingabe verwenden" zu bedeuten.

4voto

Aaron J Lang Punkte 1988

Es gibt bereits mehrere gute Antworten auf die Frage, wie man Zufallsdaten mit base64 kodiert (z. B. cat /dev/urandom | base64 ). Im Hauptteil Ihrer Frage gehen Sie jedoch näher darauf ein:

... kodiert [urandom] auf der Kommandozeile so, dass alle Ausgaben lesbare Zeichen sind, zum Beispiel base64 oder uuencode.

Angesichts der Tatsache, dass Sie nicht wirklich benötigen parseable base64 und nur wollen, dass es lesbar ist, würde ich vorschlagen

cat /dev/urandom | tr -dC '[:graph:]'

base64 gibt nur alphanumerische Zeichen und zwei Symbole (standardmäßig + und /) aus. [:graph:] passt auf alle druckbaren ASCII-Zeichen ohne Leerzeichen, einschließlich vieler Symbole/Satzzeichen, die in base64 nicht enthalten sind. Daher ist die Verwendung von tr -dC '[:graph:]' führt zu einer eher zufällig wirkenden Ausgabe und hat eine bessere Eingabe-/Ausgabeeffizienz.

Ich verwende oft < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 für die Erstellung sicherer Passwörter.

1voto

greyfade Punkte 24134

Mit den FIFO-Pipes von BASH kann man noch interessantere Sachen machen:

uuencode <(head -c 200 /dev/urandom | base64 | gzip)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X