在做一个小项目过程中,踩到了MD5类的小坑。
需求是读取用户名称和密码,将密码经MD5加密发送给服务端。
考虑到可能会重复输入的问题,所以开始想定义一个全局的MD5实例,然后定义一个MD5生成器来获取加密串,代码如下:
M = hashlib.md5()
def MD5(word): M.update(word.encode(encoding='utf-8')) return M.hexdigest()
后来在使用过程中发现,当我出入密码错误想重新输入时,返回的是错误的加密串,起先以为是数据库验证问题。后来发现服务器端验证的数据就是错的。后来考虑到有一个MD5加密的环节,经验证,果不其然是md5.upadte()方法的坑。最后重复创建实例解决了问题。
def MD5(M,word): M.update(word.encode(encoding='utf-8')) return M.hexdigest()
PWD = PWD.get() print(NAME, PWD) M = hashlib.md5()
MD5(M, PWD)
PS:md5.update()方法并没有覆盖初始值,而是通过拼接修改加密信息。