对接物流API接口中的签名校验(md5+base64方式)总结
前言
最近对接了几个物流公司的API接口,因为不同的物流公司对于其回调数据生成签名的方式不一样,所以想在此做一个总结。
一、为什么要进行接口签名校验?
这里借用此篇博客 开放API校验签名机制 里的说法,主要功能有两个:其一是防止用户传的参数被篡改,其二是防止多次请求刷数据。具体的例子可以参见上述所提的博客。
二、签名加密方式
目前仅涉及自己所接触到的md5+base64两种签名机制
1. DigestUtils实现md5加密
最终生成签名如 CPQgpysD9f/Bbt5NTNGVpE== 形式
代码如下:
String initStr = String.format("%s%s", JSON.toJSONString(req), privateKey);
byte[] encode = (new Base64()).encode(DigestUtils.md5(initStr));
String sign = new String(encode);
2. MD5Util实现md5加密
最终生成签名如 NGU0Yjk1NDc3MTVkYjljZDYxZWUxMTIxYmUzN2ZhYWI= 形式
代码如下:
String initStr = String.format("%s%s%", JSON.toJSONString(req), privateKey);
byte[] bytes = MD5Util.getMd5(initStr).getBytes();
String sign = new String(Base64.encodeBase64(bytes), StandardCharsets.UTF_8);
privateKey为用户私钥,需根据不同物流公司的签名构造方法灵活进行拼接。