Go 与 PHP 的 md5 加密结果不一致:如何实现一致的 base64 编码?
go 与 php 的 md5 功能异常:加密结果不一致
在使用 go 和 php 对字符串进行 md5 加密并 base64 编码后,您发现加密结果不一致。这是由于 php 的 md5 函数具有一个可选的“raw”参数,而 go 中的 md5 标准库中没有类似的参数。
问题分析
php 中的 md5 函数提供了一个“raw”参数,它指定是否返回二进制哈希值。当“raw”参数为 true 时,md5 函数将返回 16 字节的二进制哈希值。而 go 中的 md5 标准库直接返回 16 字节的哈希值,它是一个二进制表示形式。
解决方案
要解决这个问题,您需要在 go 中手动将哈希值转换为二进制形式。可以通过使用 md5.new 函数创建新的 md5 实例并调用其 write 方法来实现。然后,可以使用 sum 方法获取 16 字节的二进制哈希值,并将它转换为 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== }
这段代码将生成与 php 版本 md5 函数(“raw”参数为 true)相同的 base64 编码的 md5 哈希值。
以上就是Go 与 PHP 的 md5 加密结果不一致:如何实现一致的 base64 编码?的详细内容,更多请关注www.sxiaw.com其它相关文章!