This commit is contained in:
2025-07-07 20:11:59 +08:00
parent ab0fdbc447
commit 06e3aa2eb3
2009 changed files with 193082 additions and 0 deletions

92
api/hwy/sign/sign.go Normal file
View 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()
}