java md5签名算法_MD5请求签名规则
MD5簽名方法
我們默認使用MD5的簽名方法,也支持RSA256的簽名方式。
MD5簽名規(guī)則
構(gòu)造待簽名字符串。待簽名字符的生成規(guī)則如下:所有發(fā)送到后端的請求參數(shù)均加入簽名,除了sign字端
所有參與簽名的請求參數(shù)都按照名稱字符升序排列(參數(shù)名稱不允許相同)
如果參數(shù)值帶有中文, 需要制定字符集編碼為UTF-8
如果參數(shù)值為空,那么該參數(shù)不參與簽名
將采寶的合作秘鑰作為最后一個參數(shù), 參數(shù)名為:key, 參數(shù)值就是采寶的合作秘鑰本身
將請求參數(shù)用`&`拼接起來(按照名稱字符升序排列)
用MD5算法,對待簽名字符串進行加密, 生成的簽名數(shù)據(jù)(32位小寫字符), 就是公共參數(shù)中sign的值。
簽名示例
大家可以根據(jù)這個示例,來驗證自己的簽名結(jié)果是否正確。
現(xiàn)有如下參數(shù)參與簽名:
參數(shù)名
參數(shù)值
barcode
123123123123
local_order_no
localorderno123123123123
app
zyptestapp
operator_id
axgdfdafd34124
amount
100
un_discount_amount
timestamp
1460512556270
subject
這是一筆支付訂單
goods_list
那么生成的待簽名字符串為(合作秘鑰的值設(shè)為:thisistestkey):
amount=100&app=zyptestapp&barcode=123123123123&local_order_no=localorderno123123123123&operator_id=axgdfdafd34124&subject=這是一筆支付訂單×tamp=1460512556270&key=thisistestkey
注:因為un_discount_amount和goods_list兩個參數(shù)的值為空,所以沒有參與簽名
簽名結(jié)果為:
37fd31004368f9e616f277c6436985eb
md5簽名方法示例(java)
/**
* 使用md5算法進行加密
*
* @param target
* 要加密的字符串
* @param charset
* 編碼(請設(shè)置為UTF-8)
* @return 加密后的字符串
*/
public static String encryptWithMD5(String target,String charset) {
String md5Str = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.reset();
byte[] bytes = md5.digest(charset==null?target.getBytes():target.getBytes(charset));
StringBuffer stringBuffer = new StringBuffer();
for (byte b : bytes) {
int bt = b & 0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
md5Str = stringBuffer.toString();
} catch (Exception ex) {
logger.error("encrypt error,target:" + target, ex);
}
return md5Str;
}
生成簽名串并簽名的方法示例
/**
* 對params中的參數(shù)進行排序后生成簽名串
* @param params 參與簽名的參數(shù)map
* @param key 簽名要用到的加密串
* @return
*/
String sign=null;
StringBuffer sb = new StringBuffer();
//排序
List> infoIds =
new ArrayList>(params.entrySet());
Collections.sort(infoIds, new Comparator>() {
public int compare(Map.Entry o1, Map.Entry o2) {
return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
//對參數(shù)數(shù)組進行按key升序排列,然后拼接,最后調(diào)用5簽名方法
int size = infoIds.size();
for(int i = 0; i < size; i++) {
if(CheckUtil.isNotEmpty(infoIds.get(i).getValue())) {//不為空,為空的不參與簽名
sb.append(infoIds.get(i).getKey() + "=" + infoIds.get(i).getValue() + "&");
}
}
String newStrTemp = sb.toString()+"key="+key.trim();
//獲取sign_method
sign = EncryptionUtil.encryptWithMD5(newStrTemp,"UTF-8");
return sign;
總結(jié)
以上是生活随笔為你收集整理的java md5签名算法_MD5请求签名规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键卸载腾讯云监控
- 下一篇: 微信公众号获取用户信息(新)