登录 注册 注册领取7天免费IP
资讯与帮助文档
使用教程 API文档 SDK示例 IP资讯
如果有任何问题,请联系我们的客服,会有专人为您服务解答。希望九零科技的产品服务能带给您安全便利!

IP合作商API签名示例代码 —— go语言

签名算法

签名算法
加密方式 RSA
加密方法 SHA1
长度 2048
格式 PKCS1v15
私钥 private_key_pem

构造签名

参数 类型 必填 说明
RsaNo string 合作商编号
Time int 当前时间戳
.... .... 每个接口需要的参数

每次接口请求之前都需要构造签名获得token,将token带入header头部正常请求接口

下面是go语言签名示例代码:

package main

import (
    "bytes"
    "crypto"
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/base64"
    "encoding/pem"
    "errors"
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

const (
    apiURL         = "https://www.90daili.com/Api/ProjectList" // API路径
    rsaID          = "******"   // 用户编号,根据实际情况替换
    privateKeyPath = "private.pem"  // 私钥文件路径
)

func main() {
    // 生成请求体
    requestBody := fmt.Sprintf(`{"Time":"%d","RsaNo":"%s"}`, time.Now().Unix(), rsaID)

    // 签名Token
    token, err := GenerateToken(requestBody, privateKeyPath)

    if err != nil {
        fmt.Println("Error token:", err)
        os.Exit(1)
    }

    // 创建HTTP请求
    req, err := http.NewRequest("POST", apiURL, bytes.NewBufferString(requestBody))
    if err != nil {
        fmt.Println("Error request:", err)
        os.Exit(1)
    }

    // 设置必要的Headers
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Token", token)

    // 发送请求
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error sending request:", err)
        os.Exit(1)
    }
    defer resp.Body.Close()

    // 读取响应体
    body, err := io.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        os.Exit(1)
    }

    fmt.Println(string(body))
}

// 加载私钥文件
func loadPem(path string) ([]byte, error) {
    return os.ReadFile(path)
}

// SignRSA 对提供的数据进行RSA签名
func SignRSA(data string, privateKey string) (string, error) {
    block, _ := pem.Decode([]byte(privateKey))
    if block == nil {
        return "", errors.New("private key error")
    }

    privKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
    if err != nil {
        return "", err
    }

    hasher := crypto.SHA1.New()
    hasher.Write([]byte(data))
    hashed := hasher.Sum(nil)

    signature, err := rsa.SignPKCS1v15(rand.Reader, privKey.(*rsa.PrivateKey), crypto.SHA1, hashed)
    if err != nil {
        return "", err
    }

    return base64.StdEncoding.EncodeToString(signature), nil
}

// 生成请求体和签名Token
func GenerateToken(requestBody string, privateKeyPath string) (string, error) {
    privateKey, err := loadPem(privateKeyPath)
    if err != nil {
        fmt.Println("load pem error:", err)
        return "", err
    }

    privateKeyStr := string(privateKey)

    token, err := SignRSA(requestBody, privateKeyStr)
    if err != nil {
        return "", err
    }
    return token, nil
}

如有疑问,请联系九零IP在线客服

九零代理IP —— 全球高速代理,助力您的商业腾飞!

🌍 覆盖全球,高速稳定
九零代理IP拥有海量优质IP资源,覆盖国内300+城市地区,高速稳定,匿名性强,满足您的游戏搬砖、自媒体、数据采集、SEO优化、广告投放等多场景需求!

🔒 安全可靠,专业保障
采用高匿名加密技术,严格保护用户隐私,确保您的网络操作安全无忧。7×24小时专业技术支持,随时为您解决后顾之忧!

💼 商业合作,互利共赢
诚邀企业、开发者、跨境电商、营销团队等合作伙伴,共同开拓市场!我们提供灵活的合作方案,定制化服务,助力您的业务高效增长!

📩 联系我们
九零IP官网:www.90daili.com 微信:19871648261、 QQ:639317776

选择九零代理IP,携手共赢未来! 🚀

上一篇:如何买到自己想要的IP?购买指定城市代理IP(教程指南) 下一篇:IP合作商API签名示例代码 —— python语言