package activityclient import ( "encoding/base64" "encoding/json" "fmt" "91porn-server/common/crypt" ) // SignPayload 签名载荷(与 activity-public-server 保持一致) type SignPayload struct { AppId string `json:"appId"` // 应用ID UserId string `json:"userId"` // 用户ID Nickname string `json:"nickname"` // 用户昵称 Avatar string `json:"avatar"` // 用户头像 Ts int64 `json:"ts"` // 时间戳(秒) RegisteredAt int64 `json:"registeredAt"` // 用户注册时间(Unix秒) RechargeAmount int `json:"rechargeAmount"` // 充值金额(分) } // EncryptSign AES-CBC 加密签名载荷,返回 Base64 URL Safe 编码 func EncryptSign(secretKeyBase64 string, payload *SignPayload) (string, error) { secretKey, err := base64.StdEncoding.DecodeString(secretKeyBase64) if err != nil { return "", fmt.Errorf("decode secretKey failed: %w", err) } plaintext, err := json.Marshal(payload) if err != nil { return "", fmt.Errorf("marshal payload failed: %w", err) } ciphertext, err := crypt.AESCBCPck5Encrypt(plaintext, secretKey) if err != nil { return "", fmt.Errorf("encrypt failed: %w", err) } return base64.URLEncoding.EncodeToString(ciphertext), nil }