Safe ist eine Bibliothek zum Überprüfen der Stärke von Passwörtern.
https://pypi.python.org/pypi/Safe/ https://github.com/lepture/safe
INSTALL
Sie können es mit pip installieren.
$ pip install safe
Importieren Sie vorerst "sicher".
>>> import safe
Sie können die Stärke mit der Funktion safe.check ()
überprüfen.
>>> safe.check(1)
terrible
>>> safe.check('password')
simple
>>> safe.check('is.safe')
terrible
>>> safe.check('x*V-92Ba')
strong
Der Rückgabewert ist eine Instanz von safe.Strength ().
>>> type(safe.check('x*V-92Ba'))
<class 'safe.Strength'>
Das Ergebnis kann in bool () konvertiert werden.
>>> bool(safe.check('x*V-92Ba'))
True
>>> bool(safe.check('a'))
False
Ich werde den Code lesen.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L147-L189
Die Funktion safe.check ()
überprüft die Stärke des Passworts.
Sie können "raw", "length", "freq", "min_types", "level" als Argumente übergeben.
raw
ist die Kennwortzeichenfolge, nach der Sie suchen möchten. Normalerweise wird str übergeben, aber to_unicode () wird ohne Funktion ausgeführt, und selbst wenn int übergeben wird, wird es in str konvertiert und verarbeitet.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L156
to_unicode () ist in _compat.py definiert. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/_compat.py#L28-L38
length
ist die erforderliche Passwortlänge. freq
wird verwendet, um gebräuchliche Passwörter zu finden.
min_types
gibt an, wie viele Zeichentypen enthalten sein sollen. Wenn beispielsweise min_types = 3 und length = 3 ist, ist "1qA" in Ordnung (Zahl / Kleinbuchstaben / Großbuchstaben) und "1qa" ist NG (Zahl / Kleinteil).
>>> bool(safe.check('1qA', length=3, min_types=3))
True
>>> bool(safe.check('1qa', length=3, min_types=3))
False
level
ist der Schwellenwert dafür, ob die Stärke des Passworts gültig ist oder nicht. Es scheint, dass int / float für den Eingabewert akzeptabel ist, aber selbst wenn Sie einen Wert größer oder gleich STRONG angeben, wird er an STRONG zurückgegeben (andernfalls ist er immer ungültig ...).
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L157-L158
Level ist wie folgt definiert:
TERRIBLE = 0
SIMPLE = 1
MEDIUM = 2
STRONG = 3
Der Rückgabewert ist eine Instanz von "safe.Strength". safe.Strength
hat die Attribute gültig
, Stärke
und Nachricht
.
valid
ist ein Bool-Wert. True ist gültig. Stärke
ist eine Zeichenfolge, die Stärke angibt. Die Saite, die an Stärke gewinnt, ist eine der folgenden:
Zeichenkette für Stärke | Bedeutung |
---|---|
strong | Stark |
medium | In Ordnung |
simple | Einfach |
terrible | Nasenficken(Freie Übersetzung) |
(Übrigens ist diese Zeichenfolge im Code fest codiert, wenn die Datei "safe.Strength" instanziiert wird. Orz)
message
ist eine Nachricht, die zeigt, warum sie so beurteilt wurde.
Diese Funktion gibt das Ergebnis korrekt zurück, wenn Sie eine Zeichenfolge übergeben, die beispielsweise in safe.is_asdf () mit einem Zeichen abgefangen werden kann.
>>> safe.check('a', length=0, min_types=0)
simple
Wenn Sie jedoch eine Zeichenfolge übergeben, die nicht in safe.is_asdf () mit einem Zeichen abgefangen wird, wird die von safe.is_by_step () gesendete Ausnahme ohne Behandlung ausgelöst.
>>> safe.check('(', length=0, min_types=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/sximada/ng/env/lib/python3.4/site-packages/safe/__init__.py", line 163, in check
if is_asdf(raw) or is_by_step(raw):
File "/home/sximada/ng/env/lib/python3.4/site-packages/safe/__init__.py", line 89, in is_by_step
delta = ord(raw[1]) - ord(raw[0])
IndexError: string index out of range
Dies liegt daran, dass der Fehler zum Zeitpunkt der Zustandsprüfung nicht korrekt behandelt wird.
safe.is_by_step () wird später beschrieben, aber wenn eine einstellige Zeichenfolge übergeben wird, wird eine IndexError-Ausnahme ausgelöst. Wenn safe.is_asdf () eine Nicht-True-Zeichenfolge ist (z. B. (
), wird ein Zeichen (
an safe.is_by_step () übergeben.
if is_asdf(raw) or is_by_step(raw):
return Strength(False, 'simple', 'password has a pattern')
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L163-L164
Es ist jedoch selten, dass eine einzelne Zeichenprüfung zulässig ist, sodass ich das Gefühl habe, nicht zu nervös sein zu müssen.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L72-L83
Legt fest, ob die angegebene Zeichenfolge in der Tastaturreihenfolge vorliegt. Die Reihenfolge hier ist die Zeichenfolge, die an den folgenden Stellen definiert ist. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L69 Daher werden nicht alle Tastaturordnungsmuster überprüft. (Ist es nicht etwas zu klein?)
raw
ist die zu beurteilende Zeichenkette. Die durch "raw" angegebene Zeichenkette und die Zeichenkette, deren Reihenfolge umgekehrt ist, unterliegen einer Beurteilung.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L75
Bool-Wert. Gibt True zurück, wenn es in der Reihenfolge der Tastaturen liegt.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L86-L95
Die Shift-Verschlüsselung ist eine klassische und liebenswerte (aber nie verwendete) Verschlüsselungsmethode, die sich um n Zeichen verschiebt. Unter ihnen ist der Caesar-Code berühmt und verschiebt sich um 3 Zeichen. Wenn Sie beispielsweise die Zeichenfolge "test" um 3 Zeichen verschieben, erhalten Sie die Zeichenfolge "whvw". Solch eine Schnur ist im Handumdrehen gerissen, deshalb möchte ich sie nur verstecken und es hat nichts zu bedeuten. Diese Funktion bestimmt, ob es sich um eine solche Zeichenfolge handelt.
Der Abstand zwischen dem 1. und 0. Zeichen der angegebenen Zeichenfolge "raw" wird gemessen. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L89
Danach wird beurteilt, ob alle Zeichen entsprechend der Entfernung verschoben sind. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L91-L95
Wenn Sie eine Zeichenfolge der Länge 1 übergeben, wird IndexError gesendet.
>>> safe.is_by_step('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/sximada/ng/env/lib/python3.4/site-packages/safe/__init__.py", line 89, in is_by_step
delta = ord(raw[1]) - ord(raw[0])
IndexError: string index out of range
raw
ist die zu beurteilende Zeichenkette.
Der Bool-Wert. True, wenn es sich um eine Shift-Code-ähnliche Zeichenfolge handelt.
https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L98-L106
Laut Docstring wird das allgemeine Passwort 1000 unter https://xato.net/passwords/more-top-worst-passwords/ verwendet, aber leider wurde diese URL nicht gefunden ( Hallo!!).
Das Paket enthält eine Liste häufig verwendeter Kennwörter. Diese Liste wird standardmäßig verwendet. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/words.dat
Diese Datei hat das folgende Format.
String-Frequenzpegel
Die häufige Ebene ist eine Ganzzahl, die zur Beurteilung verwendet wird. Je größer der Wert, desto häufiger wird sie verwendet.
Diese Datei kann auch eine benutzerdefinierte Datei sein. Wenn Sie in diesem Fall den Pfad der benutzerdefinierten Datei in der Umgebungsvariablen "PYTHON_SAFE_WORDS_FILE" angeben, wird dieser verwendet.
Die Daten in dieser Datei werden bei Verwendung als Diktat in der Form "{'string': integer, ...}" verwendet. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L58-L61
Danach wird das Diktat zwischengespeichert und der Speicherort der Cache-Datei kann durch die Umgebungsvariable "PYTHON_SAFE_WORDS_CACHE" angegeben werden.
Diese Daten lesen die Datei beim Importieren des sicheren Pakets und bewahren sie in safe.WORDS auf. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L68
Wenn "PYTHON_SAFE_WORDS_FILE" angegeben ist und die Datei nicht vorhanden ist, wird FileNotFoundError ausgelöst und der Import schlägt fehl (leicht schmerzhafte Angabe).
raw
ist die zu beurteilende Zeichenkette.
freq
scheint ein häufig verwendetes Level zu sein. Je größer die Zahl, desto häufiger wird sie verwendet.
Der Bool-Wert. True für häufig verwendete Zeichenfolgen. False, wenn der Frequenzpegel kleiner oder gleich dem durch das Argument "freq" angegebenen Wert ist. Es ist auch falsch, wenn es nicht einer häufig verwendeten Zeichenfolge entspricht.
safe.safety () ist eine Funktion, die nur safe.check () aufruft und ihren Rückgabewert zurückgibt. Der Unterschied zwischen den beiden ist der Standardwert des Arguments. safe.check () hat einen min_type von 3, während safe.safety () einen Wert von 2 hat. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L192-L193
Diese Funktion ist jedoch nicht in all enthalten. Und ich benutze es nicht im Paket. https://github.com/lepture/safe/blob/cb554022df8be8a4f7fa0b8fbee39639b4819495/safe/init.py#L20-L23 Wird es vergessen, es aufzunehmen, oder ist es nicht enthalten, weil der Autor beabsichtigt, es abzuschaffen (obwohl ich nicht möchte, dass Sie es so machen ...), ist es auf jeden Fall sicher, ohne diese Funktion zu verwenden Es scheint besser zu sein, .check () zu verwenden. (Übrigens schreibt dieser Autor all ziemlich gut in _compat.py, also riecht es so, als hätte ich vergessen, es zu schreiben.)
Diese Bibliothek ist eine kleine Bibliothek mit nur etwa 200 Zeilen. Es wurde einfach gemacht, also schien es sehr einfach zu bedienen zu sein. Ich habe ungefähr 2 Stunden damit verbracht, diesen Artikel zu schreiben. -> Ungefähr 100 Zeilen pro Stunde
Recommended Posts