...
代码块 | ||||
---|---|---|---|---|
| ||||
/**
* 生成signature方法 CHARSET=utf-8
* param data 参数map
* param secrect 密钥
*/
public static String HmacSha256(SortedMap<String, Object> data, String secrect) {
byte[] hash = new byte[0];
try {
String stringToSign = canonicalize(data);
Mac mac = Mac.getInstance(HmacSHA256);
SecretKeySpec secretKeySpec = new SecretKeySpec(secrect.getBytes(CHARSET), mac.getAlgorithm());
mac.init(secretKeySpec);
hash = mac.doFinal(stringToSign.getBytes(CHARSET));
} catch (Exception e) {
logger.error("HmacSha256 error!", e);
}
return DatatypeConverter.printBase64Binary(hash);
}
public static String canonicalize(SortedMap<String, Object> sortedParamMap) {
if (sortedParamMap.isEmpty()) {
return "";
}
StringBuffer buffer = new StringBuffer();
Iterator<Entry<String, Object>> iter = sortedParamMap.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, Object> kvpair = iter.next();
buffer.append(percentEncodeRfc3986(kvpair.getKey()));
buffer.append("=");
buffer.append(kvpair.getValue());
if (iter.hasNext()) {
buffer.append("&");
}
}
return buffer.toString();
} |
...