go map 按字典升序排序后转 JSON md5 与 PHP 不一致
資深大佬 : Nick66 10
源码如下
package main import ( "fmt" "sort" "encoding/json" "crypto/md5" "encoding/hex" "bytes" ) func main() { params := make(map[string]string) params["name"] = "111" params["domain"] = "www.baidu.com?name=1&id=1" // 排序 keys := make([]string, len(params)) i := 0 for k, _ := range params { keys[i] = k i++ } sort.Strings(keys) for _, k := range keys { fmt.Println(k) } byteBuf := bytes.NewBuffer([]byte{}) encoder := json.NewEncoder(byteBuf) // 特殊字符不转义 encoder.SetEscapeHTML(false) err := encoder.Encode(params) if err != nil { panic(err) } data := byteBuf.String() fmt.Println(data) h := md5.New() // 与 php 一致 h.Write([]byte(`{"domain":"www.baidu.com?name=1&id=1","name":"111"}`)) // 不一致 // h.Write([]byte(data)) fmt.Println(hex.EncodeToString(h.Sum(nil))) // php 结果为 06820973e7b8d3acdb4763264a803620 }
大佬有話說 (12)