Ich möchte eine zufällige Zeichenfolge generieren (z. B. Passwörter, Benutzernamen usw.). Es sollte möglich sein, die benötigte Länge anzugeben (z. B. 13 Zeichen).
Welche Tools kann ich verwenden?
(Aus Sicherheits- und Datenschutzgründen werden Zeichenfolgen vorzugsweise offline und nicht online auf einer Website generiert.)
apg
persönlich.)apg
eine zufällige Zeichenfolge zu erzeugen./dev/urandom
. B. ). Wäre nett, einige Antworten mit echten Zufallszahlengeneratoren zu haben , die zB auf random.org basieren .Antworten:
Am liebsten lösche ich unerwünschte Zeichen mit
/dev/urandom
zusammen mittr
. So erhalten Sie beispielsweise nur Ziffern und Buchstaben:Alternativ können Sie auch weitere Zeichen aus der OWASP-Kennwort-Sonderzeichenliste einfügen :
Wenn Sie Probleme haben,
tr
sich über die Eingabe zu beschweren, fügen Sie Folgendes hinzuLC_ALL=C
:quelle
head /dev/urandom | tr -dc A-Za-z0-9 | head -c10
- Dieser Weg ist genauer. Sie erhalten 10 Zeichen, die Großbuchstaben,head
Befehl ist möglicherweise problematisch. Es werden die ersten 10 Zeilen von ausgegeben/dev/urandom
, was bedeutet, dass es stoppt, sobald es die 10. neue Zeile gesehen hat. Die Länge der an dentr
Befehl gesendeten Ausgabe ist also zufällig. Es ist möglich, dass die Ausgabe von weniger als 13 Zeichen enthälttr
. Die Wahrscheinlichkeit dafür habe ich nicht berechnet, die Berechnungen sind etwas knifflig.<dev/urandom tr -dc "$charset" | head -c "$length"
tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
tr ..
Befehl nicht funktioniert, aber alles zu zitieren (außer dem einfachen Anführungszeichen) funktioniert -tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'
.Um ein zufälliges Passwort zu generieren, können Sie Folgendes verwenden
pwgen
:Generieren Sie 7 Passwörter der Länge 13:
Wie in den Kommentaren erwähnt, können Sie die Reduzierung der Entropie vermeiden, indem Sie das
-s
Argument verwenden (dh sicherere, vollständig zufällige, aber schwer zu merkende Passwörter generieren):Um zufällige Benutzernamen zu erzeugen, können Sie Folgendes verwenden
gpw
:Generieren Sie 7 Passwörter (Benutzernamen) der Länge 13:
quelle
pwgen -s
.Ich benutze den
openssl
Befehl, das Schweizer Taschenmesser der Kryptographie.oder
quelle
rand -hex
wird die Ausgabe auf nur 16 Zeichen anstatt der 90+ auf meiner Tastatur begrenzen. base64 ist besser, weil es 64 Zeichen enthält, aber nicht zufällig ist (z. B. gibt es vorhersagbare Füllmuster, und einige Zeichen erscheinen möglicherweise häufiger als andere).openssl rand -base64 12
16 Zeichen ausgegeben werden (da 64 256 Werte zugeordnet sind). Und das Hex-Beispiel erzeugt 24 Zeichen. Beim Hex geht nichts verloren, da es sich um ein einfaches 1: 2-Mapping handelt. Im Base64-Fall kann es jedoch zu geringfügigen Verlusten kommen, da die Polsterung verwendet wird. Der Radix hat keinen Einfluss auf die Zufälligkeit, sondern auf die Art und Weise, wie einer auf einen anderen abgebildet wird. (und die Gesamtbitzahl ist viel wichtiger).Hier ist, wie ich es mache. Es werden 10 zufällige Zeichenfolgen generiert. Sie können es optimieren, indem Sie die "Falte" durch andere Zeichenkettenverarbeitungswerkzeuge ersetzen.
quelle
/dev/urandom
von natürlichSo generieren Sie ein Passwort mit der höchstmöglichen Entropie mit Standard-Linux-Tools, die in jede von mir verwendete Distribution integriert sind:
Dies gibt alle druckbaren ASCII-Zeichen aus - von 32 (Leerzeichen) bis 126 (Tilde,
~
). Die Passwortlänge kann mit dem Flaghead
's gesteuert werden-c
. Es gibt auch andere mögliche Zeichensätze intr
(um das Leerzeichen nicht einzuschließen, verwenden Sie nur die Zeichen 33-126[:graph:]
).quelle
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echo
wenn Sie nicht wollen,` characters in generated string.
weil ein Escape-Zeichen in vielen Sprachen Probleme verursacht< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echo
ausschließen und WeltraumAbhängig von der gewünschten Zufälligkeitsebene können Sie einfach die eingebaute Variable von bash (auch
zsh
undksh
möglicherweise andere) verwenden$RANDOM
:Die Methoden, aus denen direkt gelesen wird,
/dev/urandom
sind weitaus einfacher, aber zur Vervollständigung können Sie auch Folgendes verwenden$RANDOM
:Wichtig : Diese Lösung erzeugt nur zufällige Zeichenfolgen mit den ersten 10 Buchstaben des Alphabets. Ob dies für Sie ausreicht oder nicht, hängt davon ab, wofür Sie es benötigen.
quelle
$RANDOM
gibt eine Zahl zwischen 0 und 32767 aus.rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)
stattdessen einfach so etwas verwenden.Inspiriert von Pablo Repetto kam ich zu dieser leicht zu merkenden Lösung:
-z vermeidet die Ausgabe mehrerer Zeilen
-e das Ergebnis wiedergeben
-r Lässt zu, dass ein beliebiges Zeichen mehrfach vorkommt
-n20 Zufallszeichenfolge mit einer Länge von 20 Zeichen
{A..Z} {a..z} {0..9} erlaubte Zeichenklassen
shuf
ist Teil des Linux-Coreutils und weit verbreitet oder zumindest portiert.quelle
@Brandin hat in einem Kommentar zu einer anderen Antwort erklärt, wie maximal 100 Bytes aus der
/dev/urandom
Verwendung stammenhead -c 100
. Ein anderer Weg dies zu tun ist mitdd
:Am
2>/dev/null
Ende desdd
Befehls wird die Ausgabe "... zeichnet auf / ... zeichnet auf" unterdrückt.Ich kenne keine wesentlichen Vor- / Nachteile zwischen diesen beiden Methoden.
Ich hatte ein Problem mit beiden Methoden, mich
tr
über die Eingabe zu beschweren. Ich dachte , das war , weil es nicht binär Eingang empfängt getraute und daher vorgeschlagen erste Filterung/dev/random
miticonv -c -t US
. Gilles schlug jedoch eine andere Diagnose und Lösung vor, die für mich funktioniert:quelle
iconv
belastet die Lösung einen CPU-Kern und liefert keine Ausgabe (ich habe einige 10libc-bin
2.19 bereitgestellt . Ich bin nicht sicher, ob es die gleiche Ikone ist ...tr
Unterstützt Binäreingang. Ein Bereich wie dieserA-Z
kann jedoch durch Gebietsschemaeinstellungen beeinflusst werden. Versuchen SieLC_ALL=C tr …
tr
unterstützt Multibyte überhaupt nicht (z. B. als ich das letzte Mal überprüft habe, dass die Groß- / Kleinschreibung durch einfaches Setzen des sechsten Bits jedes Bytes geändert wurde). Andere Systeme (z. B. BSD) unterstützen Multibyte und dies schlägt dort fehl, da die Wahrscheinlichkeit, dass ein zufälliger Eingabestream auch ein gültiger Multibyte-Stream ist, in den meisten Codierungen sehr gering ist. GNU kann jederzeit Multibyte-Unterstützung hinzufügen. An diesem Punkt schlägt dies fehl. Die EinstellungLC_ALL=C
wird das natürlich beheben.tr
verarbeiten (in der Ländereinstellung C). (Nun, ok, es heißt nur explizit, dass Null-Bytes unterstützt werden sollen, es heißt nicht, dass nicht-leere Dateien, die nicht mit einem Zeilenvorschub enden, unterstützt werden sollen, aber in der Praxis ist das immer auch so.)APG
ist bei einigen Linux-Distributionen standardmäßig enthalten.Der Befehl zum Generieren von Kennwörtern der Größe 5 bis 10 in Teilmengen Special, Numeric, Capital und Lower lautet:
Und kehrt zurück
Wie gesagt von @landroni im Kommentar.
quelle
apg -a1 -m14
Sie können eines der
md5
Tools verwenden, die genau diesen Zweck erfüllen. Wenn Sie ein völlig zufälliges Passwort erstellen, können Sie das verwendenmd5pass
. Es ist ein sehr einfaches Tool, das sehr hilfreich ist, da Sie "normalen Text" zusammen mit einem "Salt" verwenden können, um das gleiche Kennwort zu erstellen, das Sie anschließend wiederherstellen können, oder Sie möchten alternativ ein vollständiges Kennwort erhalten zufälliges Passwort die ganze Zeit. Die allgemeine Verwendung ist:Dabei
password
handelt es sich um ein ausgewähltes Wort, das für die Konstruktion der Zufallszeichenfolge verwendet wird, undsalt
um den zu verwendenden Byte-Sprung. So was:Dadurch wird ein "Zufallssequenz" -Passwort erstellt, das Sie verwenden können. Wenn Sie no verwenden
salt
, können Sie diese Zeichenfolge möglicherweise nicht mehr erstellen.Wenn Sie jedoch einen
salt
wie diesen verwenden:Dann können Sie eine Sequenz erstellen, die Sie wiederherstellen können, wenn Sie das Wort in Verbindung mit demselben Salt (oder Sprung) verwenden, wenn es ursprünglich definiert wurde.
quelle
salt
verwendet wird, klingt dies ähnlich wie der PasswordMaker-Ansatz ...Verwenden Sie den
xxd
Befehl, um die Länge (über -l) anzugeben, die sowohl unter Linux als auch unter OS funktioniert. https://www.howtoforge.com/linux-xxd-command/quelle
Diese beiden Befehle generieren zufällige Passwörter bzw. Passphrasen.
Für den Kennwortgenerator ist eine Datei mit_Zeichen erforderlich, die alle Zeichen enthält, die vom Kennwort verwendet werden sollen, ein Zeichen pro Zeile und jeweils genau ein Mal. Die Datei darf keine Leerzeilen enthalten, und Zeilen müssen mit einem Zeilenumbruch versehen sein.
Für den Passphrasengenerator ist eine Datei mit_Wörtern erforderlich, die alle Wörter enthält, die von der Passphrase verwendet werden sollen, ein Wort pro Zeile und jeweils genau ein Mal. Die Datei darf keine Leerzeilen enthalten, und Zeilen müssen mit einem Zeilenumbruch versehen sein.
Die Option --head-count gibt die Länge des Kennworts in Zeichen oder Passphrasen in Wörtern an.
quelle
Ich habe festgestellt, dass Piping / dev / urandom auf MacOS nicht funktioniert hat. Hier ist ein anderer Weg:
quelle
Ich benutze:
base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44
Das gibt mir 57 mögliche Zeichen. Die Zeichenfolge kann kopiert (entfernt
+
und\
) oder gedruckt und erneut eingegeben werden, da die schwer zu unterscheidenden Zeichen (I1lO0
) entfernt wurden.Ich mag das, weil:
Wir danken https://unix.stackexchange.com/a/230676/9583 und insbesondere den Kommentaren für meine anfängliche Inspiration.
quelle
1
ohne die Entropie zu verringern ( wenn Sie eine neue generieren, um eine mit einer Zahl zu erhalten, wird die Entropie verringert). Sie können auch eine!
ohne Verringerung der Entropie sicher anhängen . Keines der beiden Schemata erhöht die Entropie, was auch nichts wert ist, könnte jedoch die generierte Zeichenfolge mit älteren Kennwortanforderungen in Einklang bringen.Die Unix-Philosophie "viele kleine Werkzeuge, die eines gut machen" kommt Ihnen in diesem Fall sehr entgegen.
/dev/urandom
ist ein Strom von zufälligen "Bytes" (die nicht druckbare Zeichen enthalten)base64
codiert Bytedaten in[A-Za-z0-9/+]
(die vollständig druckbar sind)dd
Kopiert die Eingabe in die Ausgabe und wendet dabei Modifikatoren an, die als Argumente angegeben werden (einschließlich Blockgröße und Blockanzahl).OSX
Linux
Anmerkungen:
tr -d '[A-Z/+]'
um Großbuchstaben und+
und loszuwerden/
bs
(Blockgröße) auf die gewünschte Länge einstellen .base64
Zeilen standardmäßig in 76 Spalten umgebrochen und müssen mit zurückgesetzt werden,-w0
sofern Sie dies nicht möchten.quelle
Ich möchte meinen üblichen Befehl zur Generierung eines Passworts beisteuern
Um die Länge des Kennworts zu konfigurieren, ändern Sie die Nummer im Befehl cut in die erforderliche Länge, z. B. 24 Zeichen
Willst du nicht 0 oder O, 1 oder l verwechseln? Filtern Sie es mit einem anderen aus
tr
Ich persönlich bevorzuge nie ein Sonderzeichen im Passwort, deshalb wähle ich nur
[:alnum:]
für meinen Passwortgeneratorquelle
Ich pflege
secpwgen
in Alpine Linux und behalte die Quellen auf meinem Github .Es kann zufällige Zeichenfolgen oder Diceware-Sätze erzeugen:
Um eine zufällige Zeichenfolge mit 13 Zeichen zu generieren, verwenden Sie:
Um sich ein Passwort zu merken, verwenden Sie die Diceware-Sätze:
Ich persönlich mag:
quelle
Mein Weg für ein sehr sicheres Passwort (wobei 16 die Pw-Länge ist):
Beispielergebnis:
Oder alternativ, um mehrere Passwörter zu generieren:
katze / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6
Beispielergebnis:
Etwas weniger sicher (kleinerer Zeichensatz):
Beispielergebnis:
quelle
Eine supereinfache und einfache (wahrscheinlich einfachere) Möglichkeit, dies zu erreichen, besteht darin, eine Zufallszahl in einem bestimmten Bereich zu generieren, diese Zahl in das entsprechende ASCII-Zeichen umzuwandeln und an das Ende einer Zeichenfolge anzuhängen .
Hier ist ein einfaches Beispiel in Python:
BEARBEITEN: Kommentare und Code hinzugefügt, um mehrere Passwörter zu generieren und in eine Datei zu schreiben
quelle
Ich hätte gerne diesen Befehl:
quelle
date +%N
Wenn Sie in einem Skript viele Benutzer und Kennwörter generieren, können die Sekunden für viele oder sogar für alle Datumsbefehle gleich sein, sodass identische Kennwörter erstellt werden.dd if=/dev/random bs=512 count=1
?Ich gehe zu http://passwordsgenerator.net/. Dort können Zeichenfolgen mit bis zu 2048 zufälligen Zeichen generiert werden. Dabei werden Groß- und Kleinbuchstaben, Ziffern von 0 bis 9, Satzzeichen oder eine beliebige Kombination ausgewählt.
quelle