我正在尝试使用 Tkinter GUI 在 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 函数返回不同的值。因此,我第一次按“提交”时,它返回“md5 HASH 对象@0x03845C68”,但从第二次开始,当我使用相同的名称和密码按“提交”时,它返回“md5 HASH 对象@0x03845DE8”。这会产生一个问题,因为为了登录,程序获取密码,再次使用哈希函数,然后将新的哈希对象与数据库中的对象进行比较,这两个对象是不同的,因为它弄乱了帐户创建中的值。
我怀疑 str(hashlib.md5(bytepass)) 可能与它有关,因为在我删除 str() 之前它在登录中做同样的事情,但我需要将哈希对象转换为将其放入 MySQL 的字符串。
最佳答案
您没有从该调用中获得 md5 散列;您得到一个对象,它有一个可以返回 md5 散列的方法。
hexpass = hashlib.md5(bytepass).hexdigest()
关于python - Python 中的 MD5 哈希函数更改数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700878/