美文网首页
DesUtils工具类

DesUtils工具类

作者: jsjack_wang | 来源:发表于2018-01-31 16:57 被阅读0次

    1.简介

    DES是一种对称的加密方式,具体原理不做介绍
    

    2.DesUtils具体实现

    public final class DesUtils {
        private static final String DES = "DES";
        private static final String KEY = "4YztMHI7PsT4rLZN";
    
        private DesUtils() {}
    
        private static byte[] encrypt(byte[] src, byte[] key) throws Exception {
            SecureRandom sr = new SecureRandom();
            DESKeySpec dks = new DESKeySpec(key);
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            SecretKey secretKey = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(DES);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);
            return cipher.doFinal(src);
        }
    
        private static byte[] decrypt(byte[] src, byte[] key) throws Exception {
            SecureRandom sr = new SecureRandom();
            DESKeySpec dks = new DESKeySpec(key);
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            SecretKey secretKey = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(DES);
            cipher.init(Cipher.DECRYPT_MODE, secretKey, sr);
            return cipher.doFinal(src);
        }
    
        private static String byte2hex(byte[] b) {
            String hs = "";
            String temp = "";
            for (int n = 0; n < b.length; n++) {
                temp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                if (temp.length() == 1)
                    hs = hs + "0" + temp;
                else
                    hs = hs + temp;
            }
            return hs.toUpperCase();
    
        }
    
        private static byte[] hex2byte(byte[] b) {
            if ((b.length % 2) != 0)
                throw new IllegalArgumentException("length not even");
            byte[] b2 = new byte[b.length / 2];
            for (int n = 0; n < b.length; n += 2) {
                String item = new String(b, n, 2);
                b2[n / 2] = (byte) Integer.parseInt(item, 16);
            }
            return b2;
        }
    
        private static String decode(String src, String key) {
            String decryptStr = "";
            try {
                byte[] decrypt = decrypt(hex2byte(src.getBytes()), key.getBytes());
                decryptStr = new String(decrypt);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return decryptStr;
        }
    
        private static String encode(String src, String key){
            byte[] bytes = null;
            String encryptStr = "";
            try {
                bytes = encrypt(src.getBytes(), key.getBytes());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            if (bytes != null)
                encryptStr = byte2hex(bytes);
            return encryptStr;
        }
    
        /**
         * 解密
         */
        public static String decode(String src) {
            return decode(src, KEY);
        }
    
        /**
         * 加密
         */
        public static String encode(String src) {
            return encode(src, KEY);
        }
    }
    

    3.测试

    public static void main(String[] args) {
        String ss = "uu123@#$";
        String encodeSS = encode(ss);
        System.out.println(encodeSS);
        String decodeSS = decode(encodeSS);
        System.out.println(decodeSS);
    }
    result:
        6EA84873A948B299936006D75B7CA819
        uu123@#$
    

    源码地址:https://gitee.com/jsjack_wang/JavaDemo

    相关文章

      网友评论

          本文标题:DesUtils工具类

          本文链接:https://www.haomeiwen.com/subject/hnrlzxtx.html