Python 中的 MD5 哈希函数更改数据

MD5 Hash function changing data in Python

我正在尝试使用 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函数returns不同的值。所以我第一次按 "submit" 它 returns 'md5 HASH object @ 0x03845C68' 但它 returns 'md5 HASH object @ 0x03845DE8' 从第二次开始当我按相同的 "submit"名称和密码。这会产生一个问题,因为为了登录,程序获取密码,再次使用哈希函数,然后将新的哈希对象与数据库中的对象进行比较,这是不同的,因为它弄乱了帐户创建中的值。

我怀疑 str(hashlib.md5(bytepass)) 可能与它有关,因为它在登录中做同样的事情,直到我删除 str(),但我需要转换哈希对象将其放入 MySQL.

您没有从该调用中获取 md5 哈希;你得到一个 对象 有一个方法可以 return md5 散列。

hexpass = hashlib.md5(bytepass).hexdigest()