You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go中不同MD5哈希计算顺序得到结果不一致的原因是什么?

Go MD5三种写法结果不一致原因说明

核心原因:对hash.Hash接口的Sum方法作用理解错误

Go标准库中hash.Hash接口的Sum(b []byte)方法的作用是将当前已计算完成的哈希值追加到切片b的末尾,返回拼接后的新切片,不会将b的内容输入到哈希计算器中参与哈希计算。

三种写法的具体逻辑拆解

  • 第一种写法错误原因:
    你初始化hasher后没有调用Write写入任何内容,此时hasher中存储的是空输入对应的MD5值:d41d8cd98f00b204e9800998ecf8427e。调用hasher.Sum([]byte(input))时,是把空输入的MD5值直接追加到input对应的字节切片末尾,再做十六进制编码。
    举个例子:如果你的input值为hi,对应的字节是[0x68, 0x69],拼接空输入的MD5后整体字节转十六进制,结果就是你拿到的6869d41d8cd98f00b204e9800998ecf8427e,完全匹配。

  • 第二种写法正确原因:
    先调用hasher.Write([]byte(input))把输入内容写入哈希计算器参与计算,再调用hasher.Sum(nil),即把计算好的输入对应的MD5值追加到空切片中返回,编码后结果正确。

  • 第三种写法正确原因:
    md5.Sum([]byte(input))是标准库封装的MD5计算便捷方法,内部逻辑等价于第二种写法:创建MD5实例、写入输入、返回计算完成的哈希值,因此结果和第二种写法完全一致。

内容的提问来源于stack exchange,提问作者minzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:48:03