初始
This commit is contained in:
92
api/hwy/sign/sign.go
Normal file
92
api/hwy/sign/sign.go
Normal file
@ -0,0 +1,92 @@
|
||||
package sign
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/sha1"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const APPID = "a23b2d45b0214f7ebbe167cd2e490435"
|
||||
const PRI_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOAoyk5ot2KHo3hFga+ozeSO6XORk6wd4MkyETSGCDrha8klXfTukAJfYz3eS/PpkdLJTGrd34D21BkKzJ7Pc+ExMwTEc4xTaWU9vVJWlshVgHUsfbRhVps3IivtK9e268j+7xHf0I6j0zJ7zOLO6aADf76e/GqVfA+rz0DPPR3jAgMBAAECgYEA3blbSy2nX42dM6VE/zTw28hEwOzZbiFrrHearyJ4140MKb2Nb23eAorJxnOxG0YI2MAGl5p5rr331AFrnxbCnb4JZ5fnT1uBNtmH4uEnHhIhQm3CsSukFWvnO5KRD+9Zl3BKUSor2ynCs5/EO0hcKlKCYtHiXKzkkUi65rLuH4kCQQD2tlELA8YDMGgKNOF3ZpvRrTqKxGb4wwg+jUX4ns4oXutc57EfG4R96MWG5gu4x/3ZVrHPMHsmPClnK7hAyXP/AkEA6JkfBiLkhlCmkCn5F3qDwuQNzTHqdm/Ql71Hogk6+2itVgJ9ua+Eegw5cVynPqrEWW2e7VbNjuiVlkMLJE0GHQJBAKFCOCTf+YzaFhcdy4X1DsJ13T8Y80mEiZ4BT4wbmRswN92JH+/6V5bJEFuFgIHuTxHBpgWMZeJvDoz+Obg3NVcCQE+tdFUzyrjAE+66khua2lv+p0OtX7Xmo7v3GPzG0K+isg4OmGbtWyI74cmVha0P7mb8CD8hRxU3U1a/7Kcow3kCQQCky3My+Qr+offSBqBE1cuFbkJ09G6nlotlPlO0pVnXOHMsUBCkfocv6QJ25KooppU1C1Cktgf9BYJ9b/r+r1Lu"
|
||||
const HOST = "http://openapi.hopewindcloud.com/"
|
||||
|
||||
// 对参数进行签名,并为 Map 添加 appid 和 sign 参数
|
||||
func SignByRSA(params map[string]string) string {
|
||||
params["appid"] = APPID
|
||||
content := CreateLinkString(params)
|
||||
privateKeyBytes, err := base64.StdEncoding.DecodeString(PRI_KEY)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
pkcs8PrivateKey, err := x509.ParsePKCS8PrivateKey(privateKeyBytes)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to parse PKCS#8 private key: %v", err)
|
||||
}
|
||||
privateKey, ok := pkcs8PrivateKey.(*rsa.PrivateKey)
|
||||
if !ok {
|
||||
log.Fatal("Private key is not of type RSA")
|
||||
}
|
||||
h := sha1.New()
|
||||
_, err = h.Write([]byte(content))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return ""
|
||||
}
|
||||
hashed := h.Sum(nil)
|
||||
signed, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA1, hashed)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return ""
|
||||
}
|
||||
sign := url.QueryEscape(base64.StdEncoding.EncodeToString(signed))
|
||||
params["sign"] = sign
|
||||
return sign
|
||||
}
|
||||
|
||||
// paramsFilter 过滤参数
|
||||
func paramsFilter(params map[string]interface{}) map[string]string {
|
||||
result := make(map[string]string)
|
||||
if params == nil || len(params) == 0 {
|
||||
return result
|
||||
}
|
||||
for key, value := range params {
|
||||
if value == nil || key == "sign" {
|
||||
continue
|
||||
}
|
||||
result[key] = value.(string)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// createLinkString 创建链接字符串
|
||||
func CreateLinkString(params map[string]string) string {
|
||||
if params == nil {
|
||||
return ""
|
||||
}
|
||||
// 排序键
|
||||
keys := make([]string, 0, len(params))
|
||||
for key := range params {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
sb := strings.Builder{}
|
||||
keyLastNum := len(keys) - 1
|
||||
for i, key := range keys {
|
||||
value := params[key]
|
||||
sb.WriteString(key)
|
||||
sb.WriteString("=")
|
||||
sb.WriteString(value)
|
||||
if i != keyLastNum {
|
||||
sb.WriteString("&")
|
||||
}
|
||||
}
|
||||
return sb.String()
|
||||
}
|
Reference in New Issue
Block a user