
go和php中的md5函数差异
在对接平台api时,需要注意go和php中的md5函数存在一定差异。具体表现为,在go中使用md5.sum计算md5值,得到的二进制结果与php中设置第二个参数为true的md5函数结果不一致。
go代码问题
代码中存在的问题是,在将md5.sum返回的[]byte转换为十六进制字符串md5str1时,没有考虑到md5摘要的固定长度(16字节)。因此,最终再进行base64编码时,得到的base64字符串与php不一致。
立即学习“PHP免费学习笔记(深入)”;
正确实现方法
为了解决这个问题,go中的代码应该将h.sum(nil)返回的[]byte直接转换为base64字符串,如下所示:
package main
import (
"crypto/md5"
"encoding/base64"
"fmt"
)
func main() {
h := md5.New()
h.Write([]byte("hello"))
fmt.Println(base64.StdEncoding.EncodeToString(h.Sum(nil)))
// echo: XUFAKrxLKna5cZ2REBfFkg==
}通过这种方式,go和php得到的md5结果将完全一致。











