Wie erstelle ich eine zufällige Zeichenfolge?


209

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.)


1
Es gibt schon gute Antworten bei AskUbuntu . (Ich apgpersönlich.)
Sparhawk

1
@Sparhawk Bei den Fragen / Antworten zu AskUbuntu geht es mehr um Auflistungstools. Bitte prüfen , indem eine Antwort hier ausstellenden wie verwenden apgeine zufällige Zeichenfolge zu erzeugen.
Landroni

1
Seien Sie vorsichtig bei der Verwendung der Zufallszahlengenerierung auf Computern. Einige sind viel weniger zufällig, als sie erscheinen, aber es ist ziemlich schwierig, den Unterschied zwischen der Erzeugung von 'guten' und 'schlechten' Zufallszahlen festzustellen.
Sobrique

@Sobrique Hervorragender Punkt zu Pseudozufallszahlengeneratoren (z /dev/urandom. B. ). Wäre nett, einige Antworten mit echten Zufallszahlengeneratoren zu haben , die zB auf random.org basieren .
Landroni

25
Scherzantwort: Um eine wirklich zufällige Zeichenfolge zu generieren, stellen Sie einen neuen Benutzer vor Emacs (oder Vim) und bitten Sie ihn, zu beenden. ;)
Wildcard

Antworten:


188

Am liebsten lösche ich unerwünschte Zeichen mit /dev/urandomzusammen mit tr. So erhalten Sie beispielsweise nur Ziffern und Buchstaben:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''

Alternativ können Sie auch weitere Zeichen aus der OWASP-Kennwort-Sonderzeichenliste einfügen :

</dev/urandom tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 13  ; echo

Wenn Sie Probleme haben, trsich über die Eingabe zu beschweren, fügen Sie Folgendes hinzuLC_ALL=C :

LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13 ; echo

15
Oder machen Sie folgendes: head /dev/urandom | tr -dc A-Za-z0-9 | head -c10- Dieser Weg ist genauer. Sie erhalten 10 Zeichen, die Großbuchstaben,
Brandin

8
Der erste headBefehl 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 den trBefehl gesendeten Ausgabe ist also zufällig. Es ist möglich, dass die Ausgabe von weniger als 13 Zeichen enthält tr. Die Wahrscheinlichkeit dafür habe ich nicht berechnet, die Berechnungen sind etwas knifflig.
Kasperd

6
Mach es besser so:<dev/urandom tr -dc "$charset" | head -c "$length"
PSkocik

3
+1 Hier ist ein kurzer Versuch, die anderen Zeichen von der OWASP-Kennwort-Sonderzeichenseite aufzunehmen , die für die Bash-Befehlszeile maskiert wurden:tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
Rup

2
@Rup Ich bin nicht sicher, was mit Ihrem tr ..Befehl nicht funktioniert, aber alles zu zitieren (außer dem einfachen Anführungszeichen) funktioniert - tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'.
Kenny Evitt

144

Um ein zufälliges Passwort zu generieren, können Sie Folgendes verwenden pwgen:

pwgen generiert zufällige, bedeutungslose, aber aussprechbare Passwörter. Diese Passwörter enthalten entweder nur Kleinbuchstaben oder gemischte Groß- und Kleinbuchstaben oder eingeworfene Ziffern. Großbuchstaben und Ziffern sind so angeordnet, dass sie sich leichter an ihre Position erinnern können, wenn nur das Wort gespeichert wird.

Generieren Sie 7 Passwörter der Länge 13:

geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he 

Wie in den Kommentaren erwähnt, können Sie die Reduzierung der Entropie vermeiden, indem Sie das -sArgument verwenden (dh sicherere, vollständig zufällige, aber schwer zu merkende Passwörter generieren):

geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz 

Um zufällige Benutzernamen zu erzeugen, können Sie Folgendes verwenden gpw:

Dieses Paket generiert aussprechbare Passwörter. Es verwendet die Statistik der Drei-Buchstaben-Kombinationen (Trigraphen), die aus den Wörterbüchern stammen, die Sie verwenden.

Generieren Sie 7 Passwörter (Benutzernamen) der Länge 13:

geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback

21
+1 für das Rad nicht neu zu erfinden. Wenn Sie die reduzierte Entropie der "aussprechbaren" Bedingung nicht wollen, verwenden Sie einfach pwgen -s.
Nate Eldredge

124

Ich benutze den opensslBefehl, das Schweizer Taschenmesser der Kryptographie.

openssl rand -base64 12

oder

openssl rand -hex 12

10
rand -hexwird 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).
Martin Tournoij

@Carpetsmoker: Beachten Sie, dass im Beispiel openssl rand -base64 1216 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).
Dennis Williamson

Die Frage lautete "Wie wird eine zufällige Zeichenfolge mit einer bestimmten Länge generiert?" @DennisWilliamson. Obwohl Ihr Kommentar als solcher korrekt ist, ist er im Kontext dieser Frage nicht korrekt .
Martin Tournoij

@Carpetsmoker: In diesem Fall ist auch diese Antwort nicht.
Dennis Williamson

4
Diese Antwort verdient mehr Gegenstimmen. urandom, pwgen, gpw usw. sind möglicherweise auf Ihrem System verfügbar oder nicht. Auch in verschiedenen Umgebungen funktioniert eine Richtlinie, die auf einer funktioniert, möglicherweise nicht auf einer anderen. Es wäre ein ziemlich dysfunktionales Setup, kein openssl zu haben. Noch besser: openssl rand -base64 32 | tr -d / = + | cut -c -16 Das ergibt 32 Zeichen minus Nicht-Alphanum und eine Länge von 16 Zeichen. Erleichtert den Umgang als Administrator. Benutzer haben nur Alphanums (die sie zu schätzen wissen). Die Länge ist lang genug, damit das Entfernen von Sonderzeichen die Entropie nicht übermäßig beeinträchtigt. Golden.
Zentechinc

18

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.

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1

1
+1 Diese Antwort ist POSIX-korrekt, abzüglich der Verwendung /dev/urandomvon natürlich
Harold Fischer

12

So generieren Sie ein Passwort mit der höchstmöglichen Entropie mit Standard-Linux-Tools, die in jede von mir verwendete Distribution integriert sind:

< /dev/urandom tr -cd "[:print:]" | head -c 32; echo

Dies gibt alle druckbaren ASCII-Zeichen aus - von 32 (Leerzeichen) bis 126 (Tilde, ~). Die Passwortlänge kann mit dem Flag head's gesteuert werden -c. Es gibt auch andere mögliche Zeichensätze in tr(um das Leerzeichen nicht einzuschließen, verwenden Sie nur die Zeichen 33-126 [:graph:]).


1
Inwiefern unterscheidet sich das von den vorhandenen Antworten? Insbesondere kommt Herbert in den Sinn.
Fox

3
@Fox Seine Lösung verwendet eine fest codierte Liste von Zeichen, was aufgrund der Lesbarkeit, Kompaktheit und Sauberkeit des Codes keine empfohlene Programmierpraxis ist. Auch einige der druckbaren ASCII-Sonderzeichen könnten durch Bash interpretiert werden, ganz zu schweigen von dem offensichtlichen Nachteil seines einen Liners. Wenn maximale Entropie gewünscht wird, kann man sicher sein, dass alle verfügbaren Zeichen in der Liste enthalten sind? Und dass es keine Duplikate gibt, die möglicherweise das Verhalten des Tr verändern könnten? Seine Antwort sollte durch meine ersetzt werden, da Sie gefragt haben :)
drws

2
Viele, wenn nicht die meisten Websites, haben Einschränkungen hinsichtlich der Zeichen, die in einem Kennwort enthalten sein können. Daher ist es für mich nichts Besseres, wenn Sie die OWASP-Kennwort-Sonderzeichenliste hart codieren. Ich glaube, dass fast jede Antwort hier durch die Verwendung einer Variablen verbessert werden könnte, aber das ist eine so geringfügige Änderung, dass ich nur eine Änderung vorschlagen würde
Fox

1
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echowenn Sie nicht wollen, ` characters in generated string. weil ein Escape-Zeichen in vielen Sprachen Probleme verursacht
mzzzzb

< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echoausschließen und Weltraum
Ryan Krage

9

Abhängig von der gewünschten Zufälligkeitsebene können Sie einfach die eingebaute Variable von bash (auch zshund kshmöglicherweise andere) verwenden $RANDOM:

$ echo $RANDOM | tr '[0-9]' '[a-z]'
bfeci
$ echo $RANDOM | tr '[0-9]' '[a-z]'
cijjj

Die Methoden, aus denen direkt gelesen wird, /dev/urandomsind weitaus einfacher, aber zur Vervollständigung können Sie auch Folgendes verwenden $RANDOM:

echo $(for((i=1;i<=13;i++)); do printf '%s' "${RANDOM:0:1}"; done) | tr '[0-9]' '[a-z]'

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.


Wie steuern Sie die Länge des generierten Strings?
Landroni

@landroni Ich glaube nicht, dass es Ihnen schwer fällt, eine Schleife zu verwenden, bis Sie die richtige Länge haben. $RANDOMgibt eine Zahl zwischen 0 und 32767 aus.
terdon

Ich habe etwa 20 Mal versucht, den Befehl
auszuführen

2
@landroni danke, ich habe eine Möglichkeit hinzugefügt, die Länge anzugeben, aber sie ist nicht sehr gut. Ich würde rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)stattdessen einfach so etwas verwenden.
terdon

1
@ SkippyleGrandGourou sehr guter Punkt. Ich habe dies zur Antwort hinzugefügt, danke.
terdon

8

Inspiriert von Pablo Repetto kam ich zu dieser leicht zu merkenden Lösung:

shuf -zer -n20  {A..Z} {a..z} {0..9}

-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.


5

@Brandin hat in einem Kommentar zu einer anderen Antwort erklärt, wie maximal 100 Bytes aus der /dev/urandomVerwendung stammen head -c 100. Ein anderer Weg dies zu tun ist mit dd:

tr -dc A-Za-z0-9 < /dev/urandom | dd bs=100 count=1 2>/dev/null

Am 2>/dev/nullEnde des ddBefehls 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/randommit iconv -c -t US. Gilles schlug jedoch eine andere Diagnose und Lösung vor, die für mich funktioniert:

LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | dd bs=100 count=1 2>/dev/null

Aus irgendeinem Grund iconvbelastet die Lösung einen CPU-Kern und liefert keine Ausgabe (ich habe einige 10
Sekunden

Auf meinem Ubuntu 14.04 System wird iconv von libc-bin2.19 bereitgestellt . Ich bin nicht sicher, ob es die gleiche Ikone ist ...
Landroni

trUnterstützt Binäreingang. Ein Bereich wie dieser A-Zkann jedoch durch Gebietsschemaeinstellungen beeinflusst werden. Versuchen SieLC_ALL=C tr …
Gilles

1
@Gilles Gemäß der POSIX-Spezifikation unterstützt es keine "Binäreingabe". Nur GNU trunterstü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 Einstellung LC_ALL=Cwird das natürlich beheben.
Martin Tournoij

@Carpetsmoker POSIX muss Binäreingaben trverarbeiten (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.)
Gilles

4

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:

apg -MSNCL -m 5 -x 10

Und kehrt zurück

@OpVeyhym9
3:Glul
3DroomIc?
hed&Os0
NefIj%Ob3
35Quok}

Wie gesagt von @landroni im Kommentar.


1
Hier sind die Optionen, um zufällige 14-Buchstaben-Passwörter mit vielen Sonderzeichen zu generieren:apg -a1 -m14
neuhaus

3

Sie können eines der md5Tools verwenden, die genau diesen Zweck erfüllen. Wenn Sie ein völlig zufälliges Passwort erstellen, können Sie das verwenden md5pass. 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:

md5pass [password] [salt]

Dabei passwordhandelt es sich um ein ausgewähltes Wort, das für die Konstruktion der Zufallszeichenfolge verwendet wird, und saltum den zu verwendenden Byte-Sprung. So was:

md5pass word

$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0

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 saltwie diesen verwenden:

md5pass word 512

$1$512$.0jcLPQ83jgszaPT8xzds0

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.


Wenn a saltverwendet wird, klingt dies ähnlich wie der PasswordMaker-Ansatz ...
landroni

-Ja Mag sich ähnlich anhören wie ein Herstellerpasswort, aber der Unterschied besteht darin, dass es sich nicht um ein kommerzielles Programm oder etwas anderes handelt, da die hier behandelten md5-Tools "md5pass, md5sum, md5sum.textutils" betroffen sind und dem System zur Verfügung stehen umsonst einige !!!
Joke Sr. OK

Eigentlich hatte ich PasswordMaker im Sinn , das ebenfalls Open Source und nichtkommerziell ist.
Landroni


2

Diese beiden Befehle generieren zufällige Passwörter bzw. Passphrasen.

shuf --random-source=/dev/urandom --repeat --head-count=20 file_with_characters | tr --delete '\n'

shuf --random-source=/dev/urandom --repeat --head-count=7 file_with_words | tr '\n' ' '

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.


1

Ich habe festgestellt, dass Piping / dev / urandom auf MacOS nicht funktioniert hat. Hier ist ein anderer Weg:

set="abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
n=6
rand=""
for i in `seq 1 $n`; do
    char=${set:$RANDOM % ${#set}:1}
    rand+=$char
done
echo $rand

Überprüfen Sie das letzte Beispiel meiner Antwort. Es wird kein tr verwendet. unix.stackexchange.com/a/494931/203075
Zibri

1

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.

  • 44 Zeichen geben mir: log 2 (57 44 )> 256,64 Bit Entropie
  • 22 Zeichen geben mir: log 2 (57 22 )> 128,32 Bit Entropie

Ich mag das, weil:

  • Der Befehl ist einfach zu tippen und einprägsam
  • Es werden Standard-System-Tools verwendet - keine zusätzlichen Binärdateien
  • "verschwendet" nicht viel Zufälligkeit (verwendet 89% der zufälligen Bits, die es empfängt, gegenüber ~ 24% für Lösungen, die direkt an tr weiterleiten)
  • 22 und 44 Zeichen paaren sich recht gut (knapp über der geraden) Potenz zweier Haltepunkte
  • Die Ausgabe kann einfach ausgewählt und eingefügt oder gedruckt und mit minimalen menschlichen Fehlerraten neu getippt werden
  • kürzer als hexadezimal codierte (32 und 64 anstelle von 22 und 44) ​​Lösungen wie md5sum / sha1sum usw.

Wir danken https://unix.stackexchange.com/a/230676/9583 und insbesondere den Kommentaren für meine anfängliche Inspiration.


Wenn Sie Zahlen / Sonderzeichen benötigen - normalerweise wird es eine Zahl geben, wenn nicht, können Sie sicher anhängen, 1ohne 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.
Freitag,

1

Die Unix-Philosophie "viele kleine Werkzeuge, die eines gut machen" kommt Ihnen in diesem Fall sehr entgegen.

  • /dev/urandomist 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

base64     < /dev/urandom | dd bs=1k count=1

Linux

base64 -w0 < /dev/urandom | dd bs=1k count=1

Anmerkungen:

  • Wenn Sie eine Teilmenge der Zeichen benötigen, können Sie einen Modifikator in die Pipe einfügen.
    • Bsp .: tr -d '[A-Z/+]'um Großbuchstaben und +und loszuwerden/
  • Sie können die bs(Blockgröße) auf die gewünschte Länge einstellen .
  • Unter Linux werden die base64Zeilen standardmäßig in 76 Spalten umgebrochen und müssen mit zurückgesetzt werden, -w0sofern Sie dies nicht möchten.

1

Ich möchte meinen üblichen Befehl zur Generierung eines Passworts beisteuern

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -13
b0R55751vWW9V

Um die Länge des Kennworts zu konfigurieren, ändern Sie die Nummer im Befehl cut in die erforderliche Länge, z. B. 24 Zeichen

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -24
WFBhVHuKbrnRhd5kdWXPzmZG

Willst du nicht 0 oder O, 1 oder l verwechseln? Filtern Sie es mit einem anderen austr

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' | tr -d '0O1l'|cut -c -24
JuCphwvhrhppD9wVqfpP2beG

Ich persönlich bevorzuge nie ein Sonderzeichen im Passwort, deshalb wähle ich nur [:alnum:]für meinen Passwortgenerator


0

Ich pflege secpwgenin Alpine Linux und behalte die Quellen auf meinem Github .

Es kann zufällige Zeichenfolgen oder Diceware-Sätze erzeugen:

musl64 [~]$ secpwgen
USAGE: secpwgen <-p[e] | -A[adhsy] | -r | -s[e]> N

PASSPHRASE of N words from Diceware dictionary
  -p    generate passphrase
  -pe   generate enhanced (with symbols) passphrase

SKEY PASSWORD of N words from S/Key dictionary
  -s    generate passphrase
  -se   generate enhanced (with symbols) passphrase

ASCII RANDOM of N elements (at least one option MUST be present)
  -A    Each letter adds the following random elements in output:
    a    alphanumeric characters
    d    decimal digits
    h    hexadecimal digits
    s    special characters
    y    3-4 letter syllables

RAW RANDOM
  -r    output BASE64 encoded string of N random BITS
  -k    output koremutake encoding of N random BITS

Um eine zufällige Zeichenfolge mit 13 Zeichen zu generieren, verwenden Sie:

musl64 [~]$ secpwgen -Aas 13
----------------
WK5#*V<]M3<CU ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

musl64 [~]$ secpwgen -Aa 13
----------------
GP0FIEBM9Y3BT ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

Um sich ein Passwort zu merken, verwenden Sie die Diceware-Sätze:

musl64 [~]$ secpwgen -p 5
----------------
wq seen list n8 kerr  ;ENTROPY=65.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

Ich persönlich mag:

musl64 [~]$ secpwgen -r 512
----------------
h62lL7G4gwh3/j9c7YteQvVXoqJrQKKPWVR3Lt7az36DcfWZWtUgBT19iwmJBwP4UahNzPe7qYD7OcklUFpCzQ== ;ENTROPY=512.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

0

Mein Weg für ein sehr sicheres Passwort (wobei 16 die Pw-Länge ist):

cat /dev/urandom | tr -cd [:graph:]|head -c 16

Beispielergebnis:

jT@s_Nx]gH<wL~W}

Oder alternativ, um mehrere Passwörter zu generieren:

katze / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6

Beispielergebnis:

7ck%G7'|f&}_8(]s
<?*]E.CG[NB'gK#A
:tF-WPTOa3!i7S(h
2xy(>=%3=Kb1B$`6
*98Lf{d?Jzb}6q1\
E7uCEAN2Hz]]y|5*

Etwas weniger sicher (kleinerer Zeichensatz):

cat /dev/urandom |base64 -w 0|fold -w 16|head -6

Beispielergebnis:

rJqYxYZLOTV+A45w
PUKQ+BoBf6yfZw5m
+LRfpsN9CsLRiN8V
yMS6zDpL6NHmG17s
yTUWPG7Rum97schi
cognvjVwaKaAyPRK

-1

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:

import random # import random library  
passFile = open("passwords.txt", 'w') # create file passwords.txt
passNum = int(input("Number of passwords: ")) # get number of  passwords
passLength = int(input("Password length: ")) # get length of passwords  
for i in range(passNum):
    password = "" # reset password
    for i in range(passLength):
        num = random.randint(65, 122) # get random number
        while num in range(91, 97): # Don't include punctuation
            num = random.randint(65, 122)
        password += chr(num) # add character to current password 
    passFile.write(password + "\n") # add current password to file  
passFile.close() # close file

BEARBEITEN: Kommentare und Code hinzugefügt, um mehrere Passwörter zu generieren und in eine Datei zu schreiben


3
Wenn ich die Macht von Python hätte, würde ich es NICHT auf diese Weise tun. Es wäre viel einfacher, einen Join für eine Zeichenfolge zu verwenden, die alle für ein Kennwort gültigen Zeichen enthält, und die Zeichen per Zufallsprinzip auszuwählen.
Mike McMahon


-2

Ich hätte gerne diesen Befehl:

date +%s | sha256sum | base64 | head -c 12

1
Ich würde eher einen zufälligen Nanosekunden-Ansatz verwenden: 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.
John Mayor

1
@JohnMayor: Dieser Ansatz ist robuster: dd if=/dev/random bs=512 count=1?
Eugen Konkov

8
Diese Antwort ist sehr gefährlich! Sie generieren die Passwörter aus einem bekannten Startwert, der leicht vorherzusagen ist. Ich könnte alle Passwörter generieren, die mit dieser Methode der letzten Jahre generiert wurden, und diese Liste für Brute Forcing-Zwecke verwenden.
Flow

-4

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.


2
Ich habe die Frage geklärt, um deutlich zu machen, dass offline generierte Zeichenfolgen vorzuziehen sind. Das Generieren eines Passworts direkt auf einer Website, insbesondere wenn die Verbindung nicht HTTPS ist (wie in Ihrer Antwort), ist nicht sicher.
Landroni

1
Das Erhalten eines zufälligen Passworts aus dem Internet ist spektakulär dumm und naiv. Jemand kennt jetzt ein Passwort, das Sie für einen Dienst oder eine Website verwenden, sowie eindeutige persönliche Daten über Sie (IP-Adresse, Browser- / Umgebungsinformationen). Diese Seite kann nun die Informationen mit anderen über Sie gesammelten Daten verknüpfen. Wenn Sie zum Beispiel einmal in eine Mailingliste geschrieben haben, befindet sich Ihre IP-Adresse in der Kopfzeile der Mail, sodass wir jetzt ein Passwort, einen Namen und eine E-Mail-Adresse haben ... Sie vertrauen hier wirklich zufälligen Fremden mit Ihren Passwörtern.
Martin Tournoij
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.