日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java md5签名算法_MD5请求签名规则

發(fā)布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java md5签名算法_MD5请求签名规则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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=這是一筆支付訂單&timestamp=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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。