import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public classHashUtils {private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e','f'};public static char[] encodeHex(byte[] bytes) {char[] chars = new char[32];for (int i = 0; i < chars.length; i += 2) {byte b = bytes[(i / 2)];
chars[i]= HEX_CHARS[(b >>> 4 & 0xF)];
chars[(i+ 1)] = HEX_CHARS[(b & 0xF)];
}returnchars;
}public staticMessageDigest getDigest(String algorithm) {try{returnMessageDigest.getInstance(algorithm);
}catch(NoSuchAlgorithmException ex) {throw new IllegalStateException("Could not find MessageDigest with algorithm \"" + algorithm + "\"", ex);
}
}public staticString md5(String src) {
MessageDigest md5= getDigest("MD5");return newString(encodeHex(md5.digest(src.getBytes())));
}public static String toSign(Mapmap) {return "";
};public static String getFormatParams(Map params,boolean flag) throws UnsupportedEncodingException {
List> infoIds =
new ArrayList>((Collection extends Entry>) params.entrySet());
Collections.sort(infoIds,new Comparator>() {public int compare(Map.Entry arg0, Map.Entryarg1) {return(arg0.getKey()).compareTo(arg1.getKey());
}
});
String ret= "";for (Map.Entryentry : infoIds) {
ret+=entry.getKey();
ret+= "=";if(flag) {if(generateJudgment(entry.getValue().toString())) {
ret+=URLEncoder.encode(entry.getValue().toString(), "UTF-8") ;
}else{
ret+=entry.getValue().toString();
}
}else{
ret+=entry.getValue().toString();
}
ret+= "&";
}
ret= ret.substring(0, ret.length() - 1);returnret;
}//判断是否有汉字
public staticboolean generateJudgment(String countname){
Pattern p= Pattern.compile("[\u4e00-\u9fa5]");
Matcher isNum=p.matcher(countname);if(isNum.find()) {return true;
}return false;
}public static voidmain(String[] args) {
String stringToSign= "B856915E" + "57C8666D91C346D1A23C766A4B8EDA85" + "1584338529869";
System.out.println(md5(stringToSign));
}
}