计算字符串ascii值
public int getStrAscii(String s){
int asciiValue=0;
if(StringUtils.isNotBlank(s)){
int len=s.length();
char[] chars = s.toCharArray();
for(char ch: chars){
asciiValue=((int) ch)+asciiValue;
}
}
return asciiValue;
}
将参数封装到map中进行md5签名
/**
* 参数签名
* @param map
* @return
*/
public String getSign(Map<String,Object> map){
StringBuilder sb=new StringBuilder();
String signKey="sign";
Set<String> keyList = map.keySet();
keyList.stream().sorted((s1, s2) -> getStrAscii(s1) - getStrAscii(s2)).forEach((t)->{
if(!signKey.equals(t)){
sb.append(t).append("=").append(map.get(t)).append("&");
}
});
String s = sb.toString();
//加签内容
String encryptedContent= s.substring(0, s.length() - 1);
//密文
return MD5Util.getMD5String(encryptedContent);
}
参数验签
/**
* 参数验签
* @param map
* @return
*/
private static boolean validSign(Map<String,Object> map){
String signContent= (String) map.get("sign");
//password双方约定好,不传输
map.put("password",123456);
String cipherText = getSign(map);
System.out.println("cipherText-->"+cipherText+",signContent="+signContent);
return StringUtils.equals(cipherText,signContent);
}
md5方法
public class MD5Util
{
protected static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
protected static MessageDigest messagedigest = null;
public static String getMD5String(String s)
{
return getMD5String(s.getBytes());
}
public static boolean checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return s.equals(md5PwdStr);
}
public static String getMD5String(byte[] bytes) {
messagedigest.update(bytes);
return bufferToHex(messagedigest.digest());
}
private static String bufferToHex(byte[] bytes) {
return bufferToHex(bytes, 0, bytes.length);
}
private static String bufferToHex(byte[] bytes, int m, int n) {
StringBuffer stringbuffer = new StringBuffer(2 * n);
int k = m + n;
for (int l = m; l < k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
return stringbuffer.toString();
}
private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
char c0 = hexDigits[((bt & 0xF0) >> 4)];
char c1 = hexDigits[(bt & 0xF)];
stringbuffer.append(c0);
stringbuffer.append(c1);
}
}