Erwartetes Ergebnis:Recursively Iterieren jede Zeichenkombination über
Das Programm nimmt ein Hash-Passwort als Eingang; Dies wird an die Entschlüsselungsfunktion übergeben. Die Funktion iteriert über jede n-Buchstaben-Kombination mit Groß- und Kleinschreibung, wobei jede dieser Zeichenfolgen hasht. Wenn eine Übereinstimmung mit der Eingabe gefunden wird, wird das unverschlüsselte Kennwort ausgegeben. Andernfalls wird es beendet.
Tatsächliches Ergebnis:
Funktion wird über jeden Groß- und Kleinbuchstaben nur für den letzten Buchstaben in der aktuellen Iteration.
Beschreibung des Problems:
Ich versuche, eine einfache Brute-Force-DES-verschlüsselte Passwort-Cracker in Python zu implementieren. Ich habe eine Implementierung für 4-stellige Passwörter mit einer Menge von for-Schleifen, aber jetzt möchte ich es für eine Reihe von Längen, mit Rekursion umgestalten. Wie kann ich über jede Zeichenkombination iterieren, angefangen bei der 1-Zeichen-Kombination bis zur 4-Zeichen-Zeichenkombination?
Ich wollte diese Linie verwenden:
password[i] = string.ascii_letters[j]
Aber ich bekomme diese Fehlermeldung:
TypeError: 'str' object does not support item assignment
-Code-Schnipsel:
def decrypt(encryptedText):
# reference global variable
global password
# check curr password guess length
pwdlen = len(password)
if pwdlen >= 4:
print("Password is longer than 4 characters, exiting...")
exit(2)
# debug lines
print("password is {}".format(password))
print("length: {}".format(pwdlen))
time.sleep(2)
# first two characters is salt
salt = encryptedText[:2]
# Check hashes for every combination of strings and compare them
# starts with last char
for i in range(pwdlen, 0, -1):
for j in range(0, len(string.ascii_letters)):
password = string.ascii_letters[:pwdlen] + string.ascii_letters[j]
hashed = crypt.crypt(password, salt)
# debug line
print(password)
# if found - print password and exit
if hashed == encryptedText:
print(password)
exit(0)
# this makes recursion go through +1 char combinations on every iteration
password = (pwdlen + 1) * 'a'
return decrypt(encryptedText)
Zeichenfolgen sind in Python unveränderlich und unterstützen keine Elementzuweisung. – Charul