js生成接口請求參數簽名加密
簽名算法規則:
第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
第二步,在stringA最后拼接上KEY得到stringSignTemp字符串(即stringSignTemp = stringA + &key=KEY),並對stringSignTemp進行MD5運算,再將得到的字符串所有字符轉換為大寫,得到sign值signValue
用於簽名的密鑰KEY值為keysecret
注意事項:
a、參數名ASCII碼從小到大排序(字典序);
b、如果參數的值為空(即null或空字符串)不參與簽名;
c、參數名區分大小寫;
d、驗證簽名時,傳送的sign參數不參與簽名,將生成的簽名與該sign值作校驗;
e、接口可能增加字段,驗證簽名時必須支持增加的擴展字段;
將所有參數字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再做MD5加密生成sign,方法如下:
functiongetSign(params, kAppKey, kAppSecret) {
if (typeof params == "string") {
return paramsStrSort(params);
} else if (typeof params == "object") {
var arr = [];
for (var i in params) {
arr.push((i + "=" + params[i]));
}
return paramsStrSort(arr.join(("&")));
}
}
functionparamsStrSort(paramsStr) {
var url = paramsStr + "&appKey=" + kAppKey;
var urlStr = url.split("&").sort().join("&");
var newUrl = urlStr + '&key=' + kAppSecret;
return md5(newUrl);
}
調用:
var params = "xid=" + xid + "&type=" + type + "&pageSize=" + pageSize + "&pageNo=" + pageNo;
var sign = getSign(params, kAppKey, kAppSecret);
或:
var paramsObj = { xid: xid, pageSize: pageSize, type: type, pageNo: pageNo };
var sign = getSign(paramsObj, kAppKey, kAppSecret);
kAppKey,kAppSecret為常量,一般由后端定義好!簽名加密方法依托MD5!
也可以使用 js-md5、crypto
進行md5加密
轉自:https://www.cnblogs.com/jone-chen/p/8143285.html