Java代码为示例呈现加密方法
1.双方协商约定好的密钥
String Secret =123456 (自定义秘钥)
/**
* 进行SHA1处理
*
* @param str
* @return
*/
public static String SHA1(String str) {
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes(StandardCharsets.UTF_8));
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (byte byte0 : md) {
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
2.进行排序
/**
* 进行排序
*
* @param params 包含appId的参数
* @return
*/
private static TreeMap<String, Object> sortParamsMap(Map<String, Object> params) {
return new TreeMap<>(params);
}
3.按照参数进行排序后拼接
/**
* 按照参数进行排序后拼接
* 拼接参数:k=v&k=v
*
* @param params
* @return
*/
public static String joiningParams(Map<String, Object> params) {
if (params == null || params.size() == 0) {
return null;
}
TreeMap<String, Object> sortedMap = sortParamsMap(params);
StringJoiner joiner = new StringJoiner("&");
sortedMap.forEach((k, v) -> joiner.add(k + "=" + v));
return joiner.toString();
}
4.获取签名
/**
* 获取签名
*
* @param params 请求参数,并且包含,appId
* @param secret 双方协商约定好的密钥 。举例见 下面的main方法
* @return
*/
public static String getSign(Map<String, Object> params, String secret) {
//1、获取拼接后的字符串。
String str = joiningParams(params);
if (str == null || str.length() == 0) {
return null;
}
//2、获取SHA1
String sha1 = SHA1(str + secret);
if (sha1 == null || sha1.length() == 0) {
return null;
}
//3、最终加密
byte[] encode = Base64.getEncoder().encode(sha1.getBytes());
return new String(encode);
}