一。般使用的签名算法
- 将所有参数(sign除外)按照参数名的字母顺序排序,并用&连接: app_id=1235123121&app_poi_code=31×tamp=1389751221
- 按照请求url + ? + 排序后的参数 + secretKey的顺序进行连接,得到加密前的字符串: http:/test.com/api/v1/poi/mget?app_id=1235123121&app_poi_codes=31×tamp=1389751221d31ba58fd73c71db697ab5e4946d52d
- 对加密前的字符串进行MD5加密,得到签名:00934d00d0aea6f12161edfb6456143d
- 将得到的签名赋给sign作为请求参数:http://test.com/api/v1/poi/mget?app_poi_codes=31&app_id=1235123121& timestamp=1389751221&sign=00934d00d0aea6f12161edfb6456143d
二。验签,使用签名算法计算出sign,然后和调用方传过来的比对,不一样就是验签失败,非法请求
三。签名代码
private static final String SIGN = "sig";
private static final String MD5 = "MD5";
private static final String CHARSET_NAME = "utf-8";
/**
*
* @param: * @param baseUrl
* @return: java.lang.String
* @throws: ApiSysException
*/
public static String genSig(String url,Map<string, object> params,String secret,boolean isDecode) {
String baseUrl = appendUrlAndParamsAndSecret(url, params, secret);
if (isDecode){
try {
baseUrl = URLDecoder.decode(baseUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return DigestUtils.md5DigestAsHex(baseUrl.getBytes());
}
/**
* 排序参数列表
* @param params
* @return
*/
private static String sortParams(Map<string, object> params) {
// 自然排序
Set<string> sortedParams = new TreeSet<string>();
sortedParams.addAll(params.keySet());
StringBuilder strB = new StringBuilder();
// 排除sign和空值参数
for (String key : sortedParams) {
if (key.equalsIgnoreCase(SIGN)) {
continue;
}
if (params.get(key) == null){
continue;
}
String value = params.get(key).toString();
if (value != null) {
strB.append(key)
.append("=")
.append(value)
.append("&");
}
}
String str = strB.toString();
if (!StringUtils.isEmpty(str)) {
str = str.substring(0, str.length() - 1);
}
return str;
}
private static String appendUrlAndParamsAndSecret(String url, Map<string, object> params, String secret) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(url)
.append("?")
.append(sortParams(params))
.append(secret);
return stringBuilder.toString();
}</string,></string></string></string,></string,>
Original: https://www.cnblogs.com/jack1990/p/15319918.html
Author: qiushui
Title: 接口验签
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/565391/
转载文章受原作者版权保护。转载请注明原作者出处!