MD5+SHA1
public static String signature(String appKey,String appSecret,long clientTime,String version) throws Exception {String pathString = "appKey=" + appKey + "&clientTime=" + clientTime+ "&version=" + version + "&" + appSecret;String data = DigestUtils.md5Hex(pathString); // MD5加密MessageDigest digest = MessageDigest.getInstance("SHA-1");byte[] hash = digest.digest(data.getBytes());// 将字节数组转换成十六进制字符串StringBuilder hexString = new StringBuilder();for (byte b : hash) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) hexString.append('0');hexString.append(hex);}return hexString.toString(); }
MD5+盐
String encrypt = GenerateUtil.randomCode(6); String s = DigestUtils.md5Hex(DigestUtils.md5Hex("123456") + encrypt);
MD5-or-HMACSHA256
public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {Set<String> keySet = data.keySet();String[] keyArray = keySet.toArray(new String[keySet.size()]);Arrays.sort(keyArray);StringBuilder sb = new StringBuilder();for (String k : keyArray) {if (k.equals(WXPayConstants.FIELD_SIGN)) {continue;}if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名sb.append(k).append("=").append(data.get(k).trim()).append("&");}sb.append("key=").append(key);if (SignType.MD5.equals(signType)) {return MD5(sb.toString()).toUpperCase();}else if (SignType.HMACSHA256.equals(signType)) {return HMACSHA256(sb.toString(), key);}else {throw new Exception(String.format("Invalid sign_type: %s", signType));} }