2016-07-29 34 views
0

Ich habe fast mein GUI abgeschlossen. Welches soll ein eingegebenes Passwort auf Stärke prüfen, d. H. Wie lange es ist, Groß- und Kleinbuchstaben, Sonderzeichen usw. ... Hash das Passwort in eine MD5-Hash, speichern Sie es in einer Textdatei. Dann würde der Benutzer das Passwort erneut eingeben, es würde erneut Hashing stattfinden, und dann würde die Textdatei überprüft werden, um zu sehen, ob dieser Hash drin war. Allerdings scheint es nicht möglich zu sein, das neu eingegebene Passwort korrekt zu hashen und damit die Datei einzuchecken.Python tkinter Passwort Checker GUI - Hashing Problem

Mein vollständiger Code:

from tkinter import * 
import hashlib 
import os 
import re 

myGui = Tk() 
myGui.geometry('500x400+700+250') 
myGui.title('Password Generator') 
guiFont = font = dict(family='Courier New, monospaced', size=18, color='#7f7f7f') 
guiFont2 = font1 = dict(family='Courier New, monospaced', size=18, color='9400d3') 


#====== Password Entry ========== 
eLabel = Label(myGui, text="Please Enter you Password: ", font=guiFont) 
eLabel.grid(row=0, column=0) 
ePassword = Entry(myGui, show="*") 
ePassword.grid(row=0, column=1) 



#====== Strength Check ======= 


def checkPassword(): 
    strength = ['Password can not be Blank', 'Very Weak', 'Weak', 'Medium', 'Strong', 'Very Strong'] 
    score = 1 
    password = ePassword.get() 

    if len(password) == 0: 
     passwordStrength.set(strength[0]) 
     return 

    if len(password) < 4: 
     passwordStrength.set(strength[1]) 
     return 

    if len(password) >= 8: 
     score += 1 

    if re.search("[0-9]", password): 
     score += 1 

    if re.search("[a-z]", password) and re.search("[A-Z]", password): 
     score += 1 

    if re.search(".", password): 
     score += 1 

    passwordStrength.set(strength[score]) 

passwordStrength = StringVar() 
checkStrBtn = Button(myGui, text="Check Strength", command=checkPassword, height=2, width=25, font=guiFont) 
checkStrBtn.grid(row=2, column=0) 
checkStrLab = Label(myGui, textvariable=passwordStrength, font=guiFont2) 
checkStrLab.grid(row=2, column=1, sticky=W) 

#====== Hash the Password ====== 


def passwordHash(): 
    hash_obj1 = hashlib.md5() 
    pwmd5 = ePassword.get().encode('utf-8') 
    hash_obj1.update(pwmd5) 
    md5pw.set(hash_obj1.hexdigest()) 

md5pw = StringVar() 
hashBtn = Button(myGui, text="Generate Hash", command=passwordHash, height=2, width=25, font=guiFont) 
hashBtn.grid(row=3, column=0) 
hashLbl = Label(myGui, textvariable=md5pw, font=guiFont2) 
hashLbl.grid(row=3, column=1, sticky=W) 


#====== Log the Hash to a file ======= 


def hashlog(): 
    loghash = md5pw.get() 

    if os.path.isfile('password_hash_log.txt'): 
     obj1 = open('password_hash_log.txt', 'a') 
     obj1.write(loghash) 
     obj1.write("\n") 
     obj1.close() 

    else: 
     obj2 = open('password_hash_log.txt', 'w') 
     obj2.write(loghash) 
     obj2.write("\n") 
     obj2.close() 

btnLog = Button(myGui, text="Log Hash", command=hashlog, height=2, width=25, font=guiFont) 
btnLog.grid(row=4, column=0) 

#====== Re enter password and check against stored hash ====== 


def verifyHash(): 
    hashinput = vHash.get() 
    hashobj2 = hashlib.md5(hashinput.encode('utf-8')).hexidigest() 

    with open('password_hash_log.txt') as obj3: 
     for line in obj3: 
      line = line.rstrip() 
      if line == hashobj2: 
       output.set("Password Match") 
      else: 
       output.set("Passwords do not match try again") 


output = StringVar() 
lblVerify = Label(myGui, text="Enter Password to Verify: ", font=guiFont) 
lblVerify.grid(row=5, column=0, sticky=W) 
vHash = Entry(myGui, show="*") 
vHash.grid(row=5, column=1) 
vBtn = Button(myGui, text="Verify Password", command=verifyHash, height=2, width=25, font=guiFont) 
vBtn.grid(row=6, column=0) 
vLbl = Label(myGui, textvariable=output, font=guiFont2) 
vLbl.grid(row=6, column=1, sticky=W) 

myGui.mainloop() 

Ich bin so nah an Finishing, was ich tun müssen, um so jede mögliche Hilfe würde sehr geschätzt werden.

+0

Warum speichern Sie den ersten Hash in einer Textdatei? Bewahre es einfach in einer Variablen auf und vergleiche das mit dem neu eingegebenen Passwort. –

+0

Ihr Teil einer Aufgabe, bei der das Passwort gegen einen gespeicherten Hash verifiziert werden muss. – JSmith

Antwort

0

In meinem vorherigen Beispiel wurde nichts durch den hexigigest passiert, um den Hash zu erzeugen. Ich habe den letzten Teil des Codes geändert und die GUI funktioniert jetzt wie geplant.

Der neue Code:

def verifyHash(): 

    hash_obj2 = hashlib.md5() 
    pwmd52 = vHash.get().encode('utf-8') 
    hash_obj2.update(pwmd52) 
    md5pw2.set(hash_obj2.hexdigest()) 

    with open('password_hash_log.txt') as obj3: 
     for line in obj3: 
      line = line.rstrip() 
      if line == md5pw2.get(): 
       output.set("Password Match") 
      else: 
       output.set("Passwords do not match try again") 

md5pw2 = StringVar() 

Jetzt md5pw2 der Hash-Code ist, und überprüft Hash nimmt die und prüft jede Zeile einer Textdatei zu sehen, ob das Hash da drin ist, gibt sie dann Spiel Passwort, wenn es findet es.