@MaximalMax: ›passwords‹ ist der falsche Name für eine Liste mit Zeichen.
Wenn man erst eine Variable mit einem Dummy-Wert belegen muß, damit eine while-Schleife startet, hat man besser eine while-True-Schleife mit break.
`letter` wird nicht benutzt und ist auch der falsche Name für eine Zahl. Besser wäre sowieso direkt über user_password zu iterieren. randint wird mit einer fixen Zahl aufgerufen, die aber der Länge von `passwords` entspricht, oder auch nicht, wenn man sich verzählt.
Besser wäre hier sowieso random.choice.
guess ist schon ein String, ebenso guess_letter. Das also nochmal in einen String zu verwandeln ist also quatsch.
Das `input` am Ende macht keinen Sinn, da der Rückgabewert nicht verwendet wird.
Code: Alles auswählen
import string
import random
characters = string.ascii_letters + string.digits + '!§$%&/()=.-,@€[]'
user_password = input("Password: ")
while True:
guess = ""
for _ in user_password:
character = random.choice(characters)
guess = character + guess
print(guess)
if guess == user_password:
break
print("Your password is: ", guess)
kürzer:
Code: Alles auswählen
while True:
guess = ''.join(random.choices(characters, k=len(user_password))
if guess == user_password:
break
Es ist selten, dass man die Länge eines "unbekannten" Passworts kennt. Wenn eine 0 im Passwort vorkommt, kann man lange suchen. Und wenn man das Passwort schon kennt, ist das Suchen witzlos. Der Zufall macht die Suche nur Langsam und man prüft etliche Passwörter doppelt und dreifach.
PS: Zu hashingWithSalt.py
Code: Alles auswählen
import hashlib
import random
salt = ["khasdASDjkawejdhewdSDsu1263213!$/asDSd", "fhawefSDASDeruqwerkjhewr787§!§bsdfjdjf", "/§DSFJADFJASDBkefhjawehrwensad."]
def hashing():
password = str(input('password: '))
print('')
hashvalue = hashlib.sha512(password.encode() + random.choice(salt).encode()).hexdigest()
print(hashvalue)
print('')
hashing()
input()
Der Sinn eines Salts ist es ja, dass Rainbow-Tables keinen Sinn mehr ergeben. Dazu muß aber der Salt wirklich zufällig sein und nicht einer von drei. Und damit man auch weiß, welchen Salt man verwenden muß, muß der natürlich auch mit dem Passwort-Hash gespeichert werden.
input liefert schon einen String, das mit str in einen String umzuwandeln ist unsinnig.
Code: Alles auswählen
import hashlib
import random
def hashing():
password = input('password: ')
salt = f"{random.getrandbits(128):16x}"
hashvalue = hashlib.sha512(password.encode() + salt.encode()).hexdigest()
print(f"{salt}:{hashvalue}")
hashing()
Und nochmals als Warnung: das ist keine sichere Methode, um Passwörter zu speichern.