go与php的md5功能,加密后不一致问题

现在因要对接一个平台的api,有一个需求:
go中字符串md5后,再base64后,结果与php版的不一样,

php代码(请注意:md5中的第二个参数为true,为输出二进~~~~制):

$str="hello";
$md5str=md5($str,true);
echo base64_encode($md5str); //echo: XUFAKrxLKna5cZ2REBfFkg==

我自己写的,始终与php版的不一致(如果php版的md5的第二参数为false的话,两个版本的结果就一致).
我的代码如下:

data := []byte("hello")
has := md5.Sum(data)
md5str1 := fmt.Sprintf("%x", has) //将[]byte转成16进制
fmt.Println(base64.StdEncoding.EncodeToString([]byte(md5str1)))

请教下在go中如何实现?
谢谢!

阅读 6.6k
1 个回答

https://play.golang.org/p/pxc-5QnciVv

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)))
    fmt.Println("Hello, playground")
    // echo: XUFAKrxLKna5cZ2REBfFkg==
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题