Ich kann dir da nichts fertiges anbieten. Die Stufen 0-2 sollten kein Problem sein,
wobei Du noch die Verwendung von Sonderzeichen berücksichtigen solltest.
Um die Berkeley-Anforderungen zu prüfen, müsstest Du wenigstens ein englisches
und
ein deutsches (bzw. Landessprachen) Wörterbuch anbinden und außerdem den
Benutzernamen mit in die Prüfung einbeziehen. Achja, ein Namensbuch wäre
dann eigentlich auch angesagt

Die Gruppenprüfung (a-z, A-Z, 0-9, ^a-zA-Z0-9) hättest Du ja ohnehin schon.
Wobei man sich klar machen sollte, dass eine solche Prüfung ein gewisses Gefahrenpotential
beinhaltet: Je spezifischere Bedingungen an ein Passwort gestellt werden, desto
mehr Abkürzungsmöglichkeiten gibt es für einen Brute-Force Algorithmus.
Wenn Passwörter mindestens 8 Stellen haben müssen, fallen z.B. schonmal
10.000.000 potentielle Passwörter weg, zumal man mit ziemlicher Sicherheit
von einer durchgängigen Länge von 8 Zeichen ausgehen kann - gerade wenn
gegen ein Wörterbuch gecheckt wird, tut sich niemand ein längeres Passwort
an.
Anforderungen an Charaktergruppen lassen teilweise sogar noch krassere Abkürzungen
zu.
Hier mal ein ganz schnell zusammengehacktes Beispiel, für die Grundtests.
Einen Schönheitspreis gewinne ich damit sicher nicht
Code: Alles auswählen
import re
def password_level(password):
tests = []
tests.append(re.compile("[a-z]"))
tests.append(re.compile("[A-Z]"))
tests.append(re.compile("[0-9]"))
tests.append(re.compile("[^0-9a-zA-Z]"))
level = test_patterns(tests, password)
if len(password) >= 6:
level += 1
if len(password) >= 8:
level += 1
return level
def test_patterns(patterns, password):
level = 0
for p in patterns:
if re.search(p, password) is not None:
level += 1
return level
print password_level("foo") # 1
print password_level("foo!") # 2
print password_level("foo!BAR") #4
print password_level("foo=!BAR") #5