import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import java.util.Map;
import java.util.TreeMap;
public class MD5Utils {
public static String sign(Map<String, Object> signMap, String md5Key, Logger logger) {
if (signMap == null || signMap.isEmpty()) {
return "";
}
signMap.remove("signature");
StringBuilder stringBuilder = new StringBuilder();
signMap.forEach((key, value) -> stringBuilder.append(key).append("=").append(value == null ? "" : value).append("&"));
String signData = stringBuilder.append("key=").append(md5Key).toString();
logger.debug("联机签名报文:[{}]", signData);
String signature = DigestUtils.md5Hex(signData);
logger.debug("signature:" + signature);
return signature;
}
/**
* @param signMap
* @param md5Key
* @param logger
* @return
*/
public static boolean verifySort(Map<String, Object> signMap, String md5Key, Logger logger) {
return MD5Utils.verify(new TreeMap<>(signMap), md5Key, (String) signMap.get("signature"), logger);
}
public static boolean verify(Map<String, Object> signMap, String md5Key, String signature, Logger logger) {
return StringUtils.equalsIgnoreCase(signature, MD5Utils.sign(signMap, md5Key, logger));
}
}