Go map 按字典升序转 JSON 后 MD5 与 PHP 不一致,如何解决?

go map 按字典升序转 json 后 md5 与 php 不一致,如何解决?

go map 按字典升序后转 json md5 与 php 不一致问题

在 go 中,使用 map 类型的有序特性进行排序后,转化为 json 字符串并计算 md5 值时,与 php 的计算结果不一致。如何解决此问题?

解决方案:

已在 [wp.hellocode.name](https://wp.hellocode.name/?p=...) 解决了此问题。

原理:

  • 使用 encoding/json 包时,默认会对特殊字符进行转义。这会导致排序后的 json 字符串php 的排序结果不同。
  • 要解决此问题,需要在使用 json 编码器时明确指定 setescapehtml(false),禁止特殊字符转义。
  • 修改后的代码如下:
// ...

byteBuf := bytes.NewBuffer([]byte{})
encoder := json.NewEncoder(byteBuf)
// 特殊字符不转义
encoder.SetEscapeHTML(false)
err := encoder.Encode(params)

以上就是Go map 按字典升序转 JSON 后 MD5 与 PHP 不一致,如何解决?的详细内容,更多请关注其它相关文章!