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

标签 python mysql tkinter md5 hashlib

我正在尝试使用 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/

相关文章:

python - 在 cherrypy 中启动 celery 任务

Python/机器学习 : Can I combine several prediction models into one

python - 检查一个数据集的行是否也在另一个数据集中并提取索引

mysql - 如何从mysql的两个表中选择数据

php - 如何通过 __construct 返回数据库连接以在 mysqli_* 中使用?

python - 如何摆脱 Python Tkinter 根窗口?

python - Django: OperationalError 在/admin/

python-3.x - 使用 python 3.x 将 tkinter 导入到 pycharm 项目中时,tkinter 未被识别为库¿为什么?

tkinter - 何时以及为何需要将窗口坐标更改为 Canvas 坐标?

mysql - 根据另一列的 MAX 从一列中选择 DISTINCT