前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python同一字符串两次运行生成的MD5码不一致问题

Python同一字符串两次运行生成的MD5码不一致问题

作者头像
用户1148830
发布2021-09-07 15:22:13
1.1K0
发布2021-09-07 15:22:13
举报

问题场景:根据给定的字符串生成32位哈希码。

第一版代码如下:

代码语言:javascript
复制
import hashlib
md5_machine = hashlib.md5()
def gen_md5_id(item):
    md5_machine.update(item.encode('utf-8'))
    return md5_machine.hexdigest()

同一个字符串两次运行产生的哈希码竟然不同,如下所示:

代码语言:javascript
复制
>>> gen_md5_id('123')
'202cb962ac59075b964b07152d234b70'
>>> gen_md5_id('123')
'4297f44b13955235245b2497399d7a93'

官方文档(https://docs.python.org/2/library/md5.html)对update函数使用说明如下:

Update the md5 object with the string arg. Repeated calls are equivalent to a single call with the concatenation of all the arguments: m.update(a); m.update(b) is equivalent to m.update(a+b).

如果重复使用对象,第二次产生的哈希码实际上是和两次字符串拼接所产生的结果是一致的。改为如下代码就行:

代码语言:javascript
复制
import hashlib

def gen_md5_id(item):
    md5_machine = hashlib.md5()
    md5_machine.update(item.encode('utf-8'))
    return md5_machine.hexdigest()

现在两次生成的结果就一样了:

代码语言:javascript
复制
>>> gen_md5_id('123')
'202cb962ac59075b964b07152d234b70'
>>> gen_md5_id('123')
'202cb962ac59075b964b07152d234b70'

另外可以看到第二段代码生成"123123"的哈希码和第一段代码第二次调用生成"123"的代码是一样的,由此佐证了文档中的解释。

代码语言:javascript
复制
>>> gen_md5_id('123123')
'4297f44b13955235245b2497399d7a93'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档