Einführung
Offensichtlich hat diese Frage gebeten worden , hier und es leider geschlossen. Ich fand es eine gute Idee, es noch einmal zu versuchen, aber richtig gemacht.
XKCD untersucht, wie wir darin geschult sind, "schwer zu merkende Passwörter" zu verwenden. Wir sind der Meinung, dass dies sicher ist, aber stattdessen würde ein Computer 3 Tage brauchen , um zu knacken. Auf der anderen Seite bringt das Erinnern von 4-5 Wörtern Kuan Password Intropy und ist leicht zu merken. Verrückt, wie das funktioniert?
Herausforderung
Der Job heute ist es, 5 Passwörter mit Worten zu erstellen. 4 Wörter pro Passwort und mindestens 4 Buchstaben pro Wort, jedoch kein Maximum. Kuans Passwort-Intropy muss für jedes Passwort berechnet werden, es wird jedoch kein erzwungenes Minimum festgelegt.
Was ist Kuans Passwort-Intropy?
Laut Kuan ist die Kennwort-Eingabe in Kuan ein Maß dafür, wie unvorhersehbar ein Kennwort ist. Es ist eine einfache Rechnung: E = log 2 (R) * L . E ist Kuans Password Intropy, R steht für den Bereich der verfügbaren Zeichen und L für die Kennwortlänge.
Der Bereich der verfügbaren Zeichen ist selbsterklärend. Es ist der Bereich von Zeichen, den ein Passwort haben kann, in diesem Fall Groß- und Kleinschreibung. Da das Alphabet 26 Zeichen enthält, sind 26 x 2 = 52 Zeichen im gesamten Bereich des Kennworts.
Die Passwortlänge ist auch selbsterklärend. Dies ist die Gesamtlänge des Kennworts nach der Erstellung.
Einschränkungen
- Keine Eingabe.
- Ein Wort kann nicht im selben Kennwort erneut angezeigt werden.
- In einem Passwort sind keine Symbole oder Zahlen zulässig.
- 4 Wörter pro Passwort, jedoch mindestens 4 Buchstaben pro Wort.
- Keine Leerzeichen zwischen Wörtern.
- Sie können nicht immer und immer wieder dasselbe Passwort generieren.
- Jedes Wort muss in einem Passwort groß geschrieben werden.
- Die Ausgabe muss für Menschen lesbar sein und einen Abstand zueinander haben. Muss auch Kuans Password Intropy des Passworts mit einbeziehen, indem die obige Password Intropy-Gleichung von Kuan verwendet wird.
- Wörterbuch . Sie müssen diese verwenden, als Textdatei herunterladen und entsprechend integrieren. Dies ist die Liste, aus der Sie Wörter abrufen. Ihr Code sollte als verfügbar gelten.
- Das ist Code-Golf , der Gewinn mit den kürzesten Bytes.
Ausgabe
TriedScarProgressPopulation 153.9
TryingPastOnesPutting 119.7
YearnGasesDeerGiven 108.3
DoubtFeetSomebodyCreature 142.5
LiquidSureDreamCatch 114.0
N
Symbolen aus dem Satz bestehtS
, lautet die Kennwortentropielog2(|S|)*N
. Hier entspricht die Größe des Symbolsatzes der Größe des Wörterbuchs (|S|=4284
) und die Anzahl der Symbole der Anzahl der Wörter (N=4
), sodass die Entropie für jedes Kennwort gleich ist48.3
.3t1ta#asd
), ist die Entropie der Logarithmus der Anzahl der möglichen Kennwörter. Wenn Sie in einem Wörterbuch mit 4284 Wörtern immer 4 Wörter nach dem Zufallsprinzip auswählen, gibt es 4284 ^ 4 Kennwörter mit jeweils einem Entropielog₂ (4284) * 4 ≈ 48.26.Antworten:
Python 2,
1021019791 BytesNimmt das Wörterbuch als Liste mit dem Namen an
f
.Kann getestet werden, indem die Datei gespeichert
dict.txt
und aufgerufen wirdquelle
exec
(exec
ist ein Schlüsselwort in Python 2).shuffle(f);
.57*len(x)/10.
. Speichern Sie ein weiteres Byte, indem Sie die Klammern entfernen, damit der Ausdruck ein Tupel aufnimmt. Hier ist eine gekürzte Version: TIOsample(f,4)
anstelle vonshuffle
. Auchf
kann nur seinopen('dict.txt').read().split('\n')
,open('dict.txt').readlines()
oder einfach nuropen('dict.txt')
(ich weiß es nicht golfed ist aber immer noch).PowerShell (3.0+), 77 Byte
Probieren Sie es online!
Mit Jonathan Allan ‚s
57*len/10
Trick.$d
enthält das Wörterbuch als Array von Wörtern. Wenn Sie zu Hause spielen und füllen möchten$d
:Verwenden einer Golfversion von
(Get-Culture).TextInfo.ToTitleCase()
, um den ersten Buchstaben in Großbuchstaben zu schreiben ; Ich glaube nicht, dass es einen kürzeren Weg gibt, dies in PowerShell zu tun.Der Rest ist ziemlich einfach, denke ich.
Der TIO-Link enthält das gesamte Wörterbuch. den Cache deaktivieren und verrückt werden!
quelle
$d
davon auszugehen, dass es in der Umgebung vorhanden ist.(gc d)| random..
Dabei ist das Wörterbuch eine Datei mit dem Namen d im selben Verzeichnis.Jelly , 22 Bytes
Ein monadischer Link, der eine Liste von Zeichen aufnimmt, das analysierte Wörterbuch (wie im Chat erlaubt ).
Probieren Sie es online! (Klicken Sie auf "Argumente", um das Wörterbuch auszublenden und den Bildlauf zu reduzieren.)
Wie?
Da das Wörterbuch nur gültige Wörter enthält (nur
4
Zeichen oder mehr[a-z]
), muss diese Bedingung nicht überprüft werden.Da alle Wörter im Wörterbuch Längen in
[4-8]
den möglichen Passwortlängen haben[16,32]
, werden die möglichen Entropien niemals anders auf eine Dezimalstelle gerundet als durch Ersetzenlog(52,2)
durch5.7
. Das einzige Problem ist , dass ein Gleitkommawert der Verwendung5.7
wird Gleitkomma geben Fehler für Längen Rundung18
,26
und31
. Das Multiplizieren mit57
und anschließendes Dividieren10
mit×57÷⁵
vermeidet dies jedoch (obwohl es immer noch ein Byte kürzer ist als das Drucken des vollständigen Gleitkomma-Genauigkeitswerts mit×52l2¤
).quelle
Ruby,
8983 BytesEs wird davon ausgegangen, dass die Kennwörter in der Variablen gespeichert sind
d
. Sie können diese Zeile vor dem Code einfügen:und rufen Sie das Skript zum Beispiel so auf:
Beispielausgabe:
KücheMiseryLurkJoints ... wow.
-6 Bytes von Ajedi32
quelle
shuffle!
und das Ersetzenpop
mitsample
.A word cannot reappear in the same password
, weil ich dachte, es bedeute keine Wiederverwendung von Wörtern über alle Passwörter hinweg. Danke :)Mathematica, 178 Bytes
Probieren Sie es online aus
Kopieren und Einfügen mit Strg-V und drücken Sie UMSCHALT + EINGABETASTE, um auszuführen
Mathematica, 136 Bytes
Angenommen, m ist das Wörterbuch, in dem sich der Code befindet
.
quelle
hosts
Datei zu ändern ).Bash ,
6665 BytesProbieren Sie es online!
Das Wörterbuch wird von STDIN erhalten. Mischt alle Wörter im Wörterbuch und gibt zuerst 4 aus.
Addiert für jedes Wort seine Länge in var l und gibt das großgeschriebene Wort wieder. Am Ende ruft bc, um die Rechnung zu machen.
Awk-Lösung, 112 Bytes, vier Passwörter:
quelle
(Dies ist eine Adaption der Antwort von Martmists, aber ich habe nicht den Repräsentanten, um einen Kommentar abzugeben.)
Python
8886 BytesIndem Sie ausnutzen, wie nicht
set
deterministisch ist, müssen Sie keine Zufallsbibliotheken importieren.quelle
set(f).pop()
.set(f).pop()
aber nicht, ich habe es versucht. Es gibt jedes Mal das gleiche Ergebnis.Japt , 30 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 164 Byte
Angenommen, das Wörterbuch wird als Array an die Funktion übergeben.
Testschnipsel
quelle
Mathematica, 71 Bytes
Angenommen, das Wörterbuch ist bereits in ein Array namens geladen
d
.Erklärung:
quelle
ColdFusion 216 Bytes
Dies funktioniert in ColdFusion 11+ und Lucee 4.5+
So führen Sie es aus: https://trycf.com/gist/ff14e2b27d66f28ff69ab90365361b12/acf11?theme=monokai
Der TryCF-Link hat weniger Golf-Charakter, aber den gleichen Code.
Ich hatte nicht wirklich damit gerechnet, eine konkurrenzfähige Golfantwort zu haben. Ich wollte nur sehen, was erforderlich ist, um diese Herausforderung in ColdFusion abzuschließen. Zumal in diesen Antworten nicht viel CF steckt. :-) Nach dem Setup war es überraschend kürzer als ich erwartet hatte.
Mein erster Versuch war etwas kürzer, bis ich mich daran erinnerte, dass dasselbe Wort nur einmal verwendet werden kann. Auch wenn es sehr unwahrscheinlich ist, dass der Zufallsgenerator denselben Index mehr als einmal auswählt, werden die Indizes in die Schlüssel einer Struktur geschrieben, wodurch eine Duplizierung verhindert wird. Dann benutze ich diese Liste von Schlüsseln, um meine endgültige Passwort-Zeichenfolge zu erstellen. Ich habe auch den mathematischen Trick benutzt, um die Entropie zu finden.
quelle
PHP ,
136129 Bytes-7 Bytes, danke Jörg
Probieren Sie es online!
quelle
Python 3, 252 Bytes
Dies ist meine erste Code Golf Challenge, die ich gemacht habe! Ich weiß, dass es hier andere Python-Antworten gibt (die wahrscheinlich besser sind als meine), aber das sah lustig aus, und deshalb wollte ich es trotzdem versuchen. Hier ist die Golfversion:
Ich würde es online ausprobieren! Link, aber das unterstützt nicht mehrere Dateien. Hier ist also ein Link zu repl.it: https://repl.it/InIl/0
Hier ist auch die ungolfed Version:
Wie ich schon sagte, dies ist mein erstes Mal Code Gofling, also bin ich sicher, dass dies viel verbessert werden könnte.
quelle
tcl, 137
Sicher kein Gewinner, aber ich denke, es kann ein bisschen mehr golfen werden.
demo - Der Zweck von Zeile 1 besteht nur darin, den Wörterbuchinhalt in die Variable einzufügen
d
quelle
Vim, 87 Tastenanschläge
Angenommen, das Wörterbuch befindet sich in einer Datei mit dem Namen
w
. Verwendet immer 4 aufeinanderfolgende Wörter.Erläuterung:
quelle
q / kdb +
76746556 BytesLösung:
Beispiel:
Erläuterung:
Lesen Sie die Wortliste ein, teilen Sie sie mit "" auf, wählen Sie 4 zufällige Wörter aus dieser Liste aus, schreiben Sie den ersten Buchstaben jedes Wortes in Großbuchstaben und fügen Sie sie dann zusammen. Geben Sie dies in eine Lambda-Funktion ein, die das Passwort und die berechnete 'Entropie' zurückgibt:
Anmerkungen:
Ich gab nach und benutzte 5.70044 anstatt
2 xlog 52 xexp
...quelle