我正在尝试使用Tkinter GUI在Python中制作一个Login程序,并使用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函数返回不同的值。因此,当我第一次按下“提交”时,它将返回“ md5哈希对象@ 0x03845C68”,但是从第二次起,当我按下具有相同名称和密码的“提交”时,它将返回“ md5哈希对象@ 0x03845DE8”。这会导致出现问题,例如要登录,程序将使用密码,再次使用哈希函数,然后将新的哈希对象与数据库中的哈希对象进行比较,这是不同的,因为它将混乱“帐户创建”中的值。 / p>
我怀疑str(hashlib.md5(bytepass))可能与它有关,因为在删除str()之前,它在登录中一直在做同样的事情,但是我需要将哈希对象转换为放在MySQL中的字符串。
答案 0 :(得分:1)
您没有从该调用中获得md5哈希;您将得到一个对象,该对象具有可以返回md5哈希值的方法。
hexpass = hashlib.md5(bytepass).hexdigest()