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

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

第一版代码如下:

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

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


>>> 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).

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

import hashlib

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

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

>>> gen_md5_id('123')
'202cb962ac59075b964b07152d234b70'
>>> gen_md5_id('123')
'202cb962ac59075b964b07152d234b70'

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

>>> gen_md5_id('123123')
'4297f44b13955235245b2497399d7a93'
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值