golang按key值進(jìn)行升序排序(ksort),對字符串進(jìn)行sha1哈希

在對接PHP語言實(shí)現(xiàn)的簽名的時候,看見對方用了ksort,由于golang里面對map的遍歷是無序的,所以用golang實(shí)現(xiàn)了對map按key值進(jìn)行升序排序:

package main

import (
    "crypto/sha1"
    "encoding/hex"
    "fmt"
    "sort"
    "strconv"
    "time"
)

func main() {
    timeStamp := time.Now().Unix()
    params := map[string]string{
        "staff_name": "hhh",
        "client_id":  "123",
        "staff_id":   "114",
        "time":       strconv.FormatInt(timeStamp, 10),
        "secret":     "aaa-999",
        "sign":       "",
    }

    var dataParams string
    //ksort
    var keys []string
    for k := range params {
        keys = append(keys, k)
    }
    sort.Strings(keys)

    //拼接
    for _, k := range keys {
        fmt.Println("key:", k, "Value:", params[k])
        dataParams = dataParams + k + "=" + params[k] + "&"
    }
    fmt.Println(dataParams)
    ff := dataParams[0 : len(dataParams)-1]
    fmt.Println("去掉最后一個&:", ff)

    //對字符串進(jìn)行sha1哈希
    h := sha1.New()
    h.Write([]byte(dataParams))
    bs := h.Sum(nil)
    sign := hex.EncodeToString(bs)

    //拼接請求參數(shù)
    dataPost := dataParams + "&sign" + "=" + sign
    fmt.Println(dataPost)
}

排序結(jié)果如下:

key: client_id Value: 123
key: secret Value: aaa-999
key: sign Value: 
key: staff_id Value: 114
key: staff_name Value: hhh
key: time Value: 1554100502

sh1哈希結(jié)果:

3c8cfd20311b2ac0c74df290686e34a61a55ad71
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容