· 7 years ago · Apr 03, 2018, 03:24 PM
1import org.apache.shiro.crypto.hash.Md5Hash;
2import org.slf4j.Logger;
3import org.slf4j.LoggerFactory;
4
5import javax.crypto.Cipher;
6import javax.crypto.SecretKey;
7import javax.crypto.spec.SecretKeySpec;
8import java.nio.charset.StandardCharsets;
9import java.util.Base64;
10
11/**
12 * åŠ å¯†å·¥å…·ç±»
13 * */
14public class Cryptography {
15
16 private static Logger logger = LoggerFactory.getLogger(Cryptography.class);
17
18 /**
19 * 定义 åŠ å¯†ç®—æ³•,å¯ç”¨ DES,DESede,Blowfish
20 */
21 private static final String Algorithm = "DESede";
22
23 /**
24 * ECBåŠ å¯†
25 *
26 * @param original
27 * æºæ–‡
28 * @param key
29 * 秘钥
30 * @return
31 */
32 public static String tripleDESEncrypt(String original, String key) {
33 try {
34 byte[] keybyte = key.substring(0, 24).getBytes();
35 // 生æˆå¯†é’¥
36 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
37 // åŠ å¯†
38 Cipher c1 = Cipher.getInstance(Algorithm);
39 c1.init(Cipher.ENCRYPT_MODE, deskey);
40 return Base64.getEncoder().encodeToString(c1.doFinal(original.getBytes(StandardCharsets.UTF_8)));
41 } catch (Exception e) {
42 logger.error("3DESåŠ å¯†å‡ºé”™", e);
43 }
44 return null;
45 }
46
47 /**
48 * ECB解密
49 *
50 * @param cryptograph
51 * 密文
52 * @param key
53 * 秘钥
54 * @return
55 */
56 public static String tripleDESDecrypt(String cryptograph, String key) {
57 try {
58 byte[] keybyte = key.substring(0, 24).getBytes();
59 byte[] src = Base64.getDecoder().decode(cryptograph);
60 // 生æˆå¯†é’¥
61 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
62 // 解密
63 Cipher c1 = Cipher.getInstance(Algorithm);
64 c1.init(Cipher.DECRYPT_MODE, deskey);
65 return new String(c1.doFinal(src));
66 } catch (Exception e) {
67 logger.error("3DES解密出错", e);
68 }
69 return null;
70 }
71
72
73 /**
74 * MD5 ç›å€¼åР坆
75 */
76 public static String MD5Hash(String target,String salt){
77 //将当å‰è¾“入密ç åŠ å¯†ï¼Œç”¨äºŽåŒ¹é…æ•°æ®åº“ä¸çš„密ç
78 String res=new Md5Hash(target,salt).toString();
79 return res;
80 }
81
82 /**
83 * æ ¡éªŒMD5结果
84 * @param encrypt åŠ å¯†åŽçš„å—符串,targetåŠ å¯†å‰ï¼Œsaltç›å€¼
85 */
86 public static boolean checkMd5Hash(String encrypt,String target,String salt){
87 return MD5Hash(target,salt).equals(encrypt)?true:false;
88 }
89}