package com.nq.utils;
|
|
import java.io.UnsupportedEncodingException;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.TreeMap;
|
|
/**
|
* @program: dabaogp
|
* @description: 支付2签名
|
* @create: 2025-04-02 16:55
|
**/
|
public class SignatureGeneratorUtil {
|
|
/**
|
* 签名
|
*
|
* @param parameter 参数
|
* @param secretKey 密钥
|
* @return 签名字符串
|
*/
|
public static String generateSign(Map<String, String> parameter, String secretKey) {
|
// 移除 'sign' 参数
|
parameter.remove("sign");
|
|
// 对参数按照键进行排序
|
Map<String, String> sortedParams = new TreeMap<>(parameter);
|
|
StringBuilder signStr = new StringBuilder();
|
|
// 拼接所有参数,格式为 key=value&
|
Set<Map.Entry<String, String>> entrySet = sortedParams.entrySet();
|
for (Map.Entry<String, String> entry : entrySet) {
|
String key = entry.getKey();
|
String value = entry.getValue();
|
if (value != null && !value.isEmpty()) {
|
signStr.append(key).append("=").append(value).append("&");
|
}
|
}
|
|
// 拼接密钥
|
signStr.append("key=").append(secretKey);
|
System.out.println(signStr);
|
// 生成md5签名并转为小写
|
return md5(signStr.toString()).toLowerCase();
|
}
|
|
/**
|
* 计算 MD5 值
|
*
|
* @param str 待加密字符串
|
* @return MD5 加密后的字符串
|
*/
|
private static String md5(String str) {
|
try {
|
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
|
byte[] bytes = md.digest(str.getBytes());
|
StringBuilder sb = new StringBuilder();
|
for (byte b : bytes) {
|
sb.append(String.format("%02x", b));
|
}
|
return sb.toString();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return "";
|
}
|
|
}
|