直接上代碼
package main
import (
"crypto/sha1"
"encoding/hex"
"fmt"
"net/http"
"sort"
)
func main() {
// 綁定路由
http.HandleFunc("/", sign)
// 啟動(dòng)監(jiān)聽(tīng)
err := http.ListenAndServe(":9999", nil)
if err != nil {
fmt.Println("服務(wù)器啟動(dòng)失斒涔稀烦粒!")
}
}
func sign(response http.ResponseWriter, request *http.Request) {
//解析參數(shù)
err := request.ParseForm()
if err != nil {
return
}
var token string = "Wingbow"
// 獲取參數(shù)
signature := request.FormValue("signature")
timestamp := request.FormValue("timestamp")
nonce := request.FormValue("nonce")
echostr := request.FormValue("echostr")
//將token棍厂、timestamp框喳、nonce三個(gè)參數(shù)進(jìn)行字典序排序
var tempArray = []string{token, timestamp, nonce}
sort.Strings(tempArray)
//將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
var sha1String string = ""
for _, v := range tempArray {
sha1String += v
}
h := sha1.New()
h.Write([]byte(sha1String))
sha1String = hex.EncodeToString(h.Sum([]byte("")))
//獲得加密后的字符串可與signature對(duì)比
if sha1String == signature {
_, err := response.Write([]byte(echostr))
if err != nil {
fmt.Println("響應(yīng)失敗您访。季二。狐粱。")
}
} else {
fmt.Println("驗(yàn)證失敗")
}
}