API接口签名生成算法和签名验证算法

本文介绍了API接口的签名生成及验证算法,通过排序参数、拼接字符串、MD5散列和Base64编码确保请求的安全性和可靠性。详细步骤包括参数排序、字符串构建、加密过程,并提供了Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、参考网上资料和书本资料,实现了API接口签名生成算法和签名验证算法。

(1)参考资料:https://www.jianshu.com/p/d47da77b6419

(2)参考书籍:高级软件架构师教程(311-312)

 

2、API接口签名生成算法

主要步骤如下:

(1)将所有业务请求参数按字母先后顺序排序。

(2)参数名称和参数值链接成一个字符串A。

(3)在字符串A的首尾加上apiSecret接口密匙组成一个新字符串B。

(4)对字符串进行MD5散列运算得到API签名sign,然后再进行Base64编码。

 

假设请求的参数为:f=1,b=23,k=33,排序后为b=23,f=1,k=33,参数名和参数值链接后为b23f1k33,首尾加上appsecret后md5:

C = md5(secretkey1value1key2value2...secret);

Base64.encode(C );

 

以上签名方法安全有效地解决了参数被篡改和身份验证的问题,如果参数被篡改,没事,因为别人无法知道apiSecret,也就无法重新生成新的sign,从而保证接口调用是可靠的。

Java代码

/**

* 添加参数到HTTP请求里面

* @param method

* @param path

* @param params

* @param apiKey

* @param apiSecret

*/

void addRequiredParams(String method, String path, Map<String, String> params, String apiKey, String apiSecret) {

params.put("key", apiKey); //标识

params.put("sigVer", "1"); //签名版本

String ts = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS").format(LocalDateTime.now());

params.put("ts", ts); //时间戳

params.put("nonce", RandomStringUtils.randomAlphanumeric(16));

String sig = getSig(method, path, apiSecret, params);

params.put("sig", sig); //API签名

}



/**

* API签名生成

*

* @param method

* @param path

* @param apiSecret

* @param 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值