package shujubao import ( "crypto/hmac" "crypto/md5" "encoding/hex" "strings" ) // SignMethod 签名方法 type SignMethod string const ( SignMethodMD5 SignMethod = "md5" SignMethodHMACMD5 SignMethod = "hmac" ) // GenerateSignMD5 使用 MD5 生成签名:md5(app_secret + timestamp),32 位小写 func GenerateSignMD5(appSecret, timestamp string) string { h := md5.Sum([]byte(appSecret + timestamp)) sign := strings.ToLower(hex.EncodeToString(h[:])) return sign } // GenerateSignHMAC 使用 HMAC-MD5 生成签名(仅 timestamp,兼容旧逻辑) func GenerateSignHMAC(appSecret, timestamp string) string { mac := hmac.New(md5.New, []byte(appSecret)) mac.Write([]byte(timestamp)) sign := strings.ToLower(hex.EncodeToString(mac.Sum(nil))) return sign } // GenerateSignFromParamsMD5 根据入参生成签名:入参按 ASCII 排序组合后与 app_secret 做 MD5。 // sortedParamStr 格式为 key1=value1&key2=value2&...(key 按字母序)。 func GenerateSignFromParamsMD5(appSecret, sortedParamStr string) string { h := md5.Sum([]byte(appSecret + sortedParamStr)) sign := strings.ToLower(hex.EncodeToString(h[:])) return sign } // GenerateSignFromParamsHMAC 根据入参生成签名:入参按 ASCII 排序组合后与 app_secret 做 HMAC-MD5。 func GenerateSignFromParamsHMAC(appSecret, sortedParamStr string) string { mac := hmac.New(md5.New, []byte(appSecret)) mac.Write([]byte(sortedParamStr)) sign := strings.ToLower(hex.EncodeToString(mac.Sum(nil))) return sign }