JAVA sign按照字典排序进行签名工具类

    xiaoxiao2022-07-13  151

    import com.weiwen.provider.service.MapKeyComparator; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; public class MD5 { public static void main(String[] args) { MD5 md5 = new MD5(); String ss = md5.md5("10012843443"); String s="61430CA53505866C97CD7D45FD01966A"; System.out.println(s.length()); System.err.println(ss); Map<String, Object>map=new HashMap<String,Object>(); map.put("name", "harry"); map.put("b", "harry"); map.put("level", "top"); map.put("g", ""); map.put("m", "lal"); map.put("alary", 1000); String sign = sign(map); System.out.println("签名为================="+md5(sign)); } /** * * @param plainText * 明文 * @return 32位密文 */ public String encryption(String plainText) { String md5 = new String(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } md5 = buf.toString(); } catch (Exception e) { e.printStackTrace(); } return md5; } /** * 使用 Map按key进行排序 * @param map * @return */ public static Map<String, Object> sortMapByKey(Map<String, Object> map) { if (map == null || map.isEmpty()) { return null; } Map<String, Object> sortMap = new TreeMap<String, Object>(new MapKeyComparator()); sortMap.putAll(map); return sortMap; } /** * 签名 */ public static String sign(Map<String,Object>map){ System.out.println("排序前:"+map); map=sortMapByKey(map); System.out.println("排序后"+map); List<Object> list=new ArrayList<Object>(); String str=""; Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()){ String key=iter.next(); Object value = map.get(key); list.add(key+"="+value); } int leng=list.size()-1; for(int i=0;i<leng;i++){ str+=(list.get(i)+"&");//拼索要加密的字符串格式 } str+=list.get(leng); // System.out.println("要加密的字符串:"+str);//所要加密的字符串 // System.out.println("加密之后的密文"+md5(str));//加密之后的密文 return str; } }

    MapKeyComparator类

    import java.util.Comparator; public class MapKeyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }

    以下是结果:

    最新回复(0)