昨天上网找了一下发现可以很简单的就能实现加密解密,不对的地方欢迎指出:
如下图:
水平很菜,哈哈
前提:
maven项目注入依赖:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
1.首先我对需要加密的字段做了一个拼接,因为是多个参数需要拼接成一个字符串,
因为md5加密是要按照:key=value&key1=value2的形式从左到右要按照首字母排序,所以.....
参数:
map:多个字段以key-value存到map里,如果只有一个字段直接调用加密方法即可(第二张图),不用拼接
key:需要在末尾拼接的密钥,此时key=传入的key值,不参与字段排序,所以额外拼接,key为非必须参数,根据具体业务而定
TreeMap:再存入treemap是为了可以自动排序;
遍历拼接
public static String pinjie(Map<String,Object> map,String key) {
StringBuilder sb=new StringBuilder();
TreeMap<String, Object> treemap=new TreeMap<>();
//遍历Map
Set<Entry<String, Object>> ens=map.entrySet();
for (Entry<String, Object> entry : ens) {
treemap.put(entry.getKey(), entry.getValue());
}
Set<Entry<String , Object>> et=treemap.entrySet();
for(Entry<String, Object> e:et) {
sb.append(e.getKey()+"="+e.getValue()+"&");
}
//追加密匙
sb.append("key="+key);
return sb.toString();
}
2.加密方法传入需要加密的字符串。
加密验证:参数md5是传入已经加密过的(签名),进行再次加密对比
public static String md5(String text) throws Exception {
//加密后的字符串
String encodeStr=DigestUtils.md5Hex(text);
System.out.println("MD5加密后的字符串为:encodeStr="+encodeStr);
return encodeStr;
}
/**
* 验证加密
* @throws Exception
*/
public static boolean validate(String text,String md5) throws Exception {
String s=md5(text);
if(s.equals(md5)) {
return true;
}
return false;
}
举个栗子:
public static void main(String[] args) throws Exception {
Map<String, Object> map=new HashMap<>();
map.put("c", "c");
map.put("a", "a");
map.put("1", 1);
String s=pinjie(map,"i am key");
System.out.println("拼接后是:"+s);
md5(s);
}
结果输出:
拼接后是:1=1&a=a&c=c&key=i am key
MD5加密后的字符串为:encodeStr=a60ce8230c39fe7ad57dcef8ebce09fd