Generieren Sie XKCD-Passwörter aus einer einzelnen Bash-Zeile

Generieren Sie XKCD-Passwörter aus einer einzelnen Bash-Zeile

Es gibt einige „XKCD-Passwort“-Generatoren, aber die Aufgabe scheint so einfach zu sein, dass ich eine kompakte und einfache Lösung wollte. Meine Anforderungen waren:

  • Einzeiliger Alias ​​(oder wenige Zeilen Funktion) zum Einfügen.profile
  • Standard-Unix-Befehle (erfordern keine Pakete)
  • Spaltenausgabe (wie pwgen)
  • Wörter in Großbuchstaben (zur besseren Lesbarkeit)

(Ich verzichte gern auf Befehlszeilenoptionen zugunsten der Einfachheit.)

for i in {1..32}; do grep -E "^[a-z]{4,8}$" /usr/share/dict/words | gshuf -n4 | gsed 's/.*/\u&/' | tr -d '\n' | awk '{print $1}'; done | column

Aktuelle Probleme:

  • shuferfordert brew install coreutilsauf macOS (das ich auch verwende)
  • sederfordert brew install gnu-sed(ebenfalls)
  • tr -d '\n' | awk '{print $1}'scheint albern.

Wie kann ich eine kurze, aber lesbare Befehlszeile erstellen, die sowohl unter Linux als auch unter macOS funktioniert?

Nebenbei bemerkt habe ich festgestellt, dass man durch die Verwendung von SCOWL, das eine Bandbreite von kurzen Wortlisten mit gebräuchlichen Namen bis hin zu langen Wortlisten mit obskuren Wörtern bietet, einen Kompromiss zwischen Einprägsamkeit und Entropie finden kann.

Antwort1

Ich habe von hier aus keinen Zugriff auf meinen Mac, aber da er unter OS X 10.4.11 läuft, bin ich mir nicht sicher, ob er mit Ihrer Umgebung vergleichbar wäre. Mit dem Folgenden können Sie ein einzelnes Passwort unter FreeBSD generieren. Wenn dies Ihren Anforderungen nicht entspricht, können Sie mir gerne in den Kommentaren mitteilen, was fehlt:

(sort -R /usr/share/dict/words                                   \
 | head -n 4                                                     \
 | awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }'  \
 ; echo)

Unter FreeBSD und meinem Arch Linux-System sort -Rwird die Eingabe zufällig angeordnet. Es ist nur pseudozufällig, aber das ist auch das Beste, was Sie mit den meisten anderen Programmen erreichen werden. Wählen Sie dann mit vier Wörter aus diesem Satz aus head. Anstelle von GNU kann verwendet werden sed, awkum das erste Zeichen jeder Zeile groß zu schreiben. Schließlich echowird verwendet, um die abschließende neue Zeile zu platzieren. Dies alles befindet sich in einer Subshell, um die Einbindung in eine Schleife, Pipe oder andere Konstruktion zu erleichtern.

verwandte Informationen