我试图使用Tkinter在Python中创建一个登录程序,并使用hashlib MD5对密码进行散列。这是我创建帐户的代码。
def AccountEntry():
tk.Label(m, text = "Account Creation").grid(row =2 ,column =1)
tk.Label(m, text = "Enter name").grid(row = 3, column = 0)
ename = tk.Entry(m)
ename.grid(row = 3, column = 1)
tk.Label(m, text = "Enter password").grid(row = 4,column = 0)
epassword = tk.Entry(m, show = "*")
epassword.grid(row = 4, column = 1)
tk.Button(m, text = "Submit", command = lambda:Account(epassword,ename)).grid(row = 5, column = 1)
def Account(epassword,ename):
name = ename.get()
password = epassword.get()
bytepass = bytes(password, 'utf-8')
hexpass = str(hashlib.md5(bytepass))
enter_table = (name,hexpass)
cursor.execute("insert into lusers(name, hexpass) values(%s,%s)",(enter_table))
db.commit()
tk.Label(m, text = "Successfully made account").grid(row = 6, column = 1)问题基本上是md5函数返回不同的值。因此,当我第一次按下"submit“时,它返回'md5散列对象@ 0x03845C68‘,但它从第二次按下具有相同名称和密码的"submit”时返回'md5散列对象@ 0x03845DE8’。这就产生了一个问题,因为为了登录,程序接受密码,再次使用散列函数,然后将新的散列对象与数据库中的散列对象进行比较,这与数据库中的哈希对象不同,因为它会混淆帐户创建中的值。
我怀疑str(hashlib.md5(bytepass))可能与它有关,因为它在登录中执行相同的操作,直到移除str(),但我需要将散列对象转换为字符串以将其放入MySQL中。
发布于 2019-11-04 20:59:59
您不会从该调用中获取md5哈希;您将得到一个具有可以返回md5哈希的方法的对象。
hexpass = hashlib.md5(bytepass).hexdigest()https://stackoverflow.com/questions/58700878
复制相似问题