3DES-CDC加解密

3EDS-CBC加解密

  • 3DES-CDC加解密

3DES-CDC加解密

近日有需求写一个3DES-CBC加解密方法,查阅了大量资料,都没有找到自己想要的代码。通过综合各篇文章的经验,最终也写出了自己想要的方法,现将方法留存以供日后查阅。

    package threedes;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    public class ThreeDesCBC {
    	
    	private static final String IV = "00000000";
    	public static final String KEY = "RGT3umPcTLCVgszeeodeLJGv";//密钥
    
        /**
         * DESCBC加密
         *
         * @param src
         *            数据源
         * @param key
         *            密钥,长度必须是8的倍数
         * @return 返回加密后的数据
         * @throws Exception
         */
        public String encryptDESCBC(final String src, final String key) throws Exception {
    
            // --生成key,des/DESede(DESCBC)
            SecretKey deskey = new SecretKeySpec(key.getBytes("UTF-8"), "DESede");  
            // --加密向量
            final IvParameterSpec iv = new IvParameterSpec(IV.getBytes("UTF-8"));
    
            final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, deskey, iv);
            final byte[] b = cipher.doFinal(src.getBytes("UTF-8"));
    
            // --通过base64,将加密数组转换成字符串
            final BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(b);
        }
    
        /**
         * DESCBC解密
         *
         * @param src
         *            数据源
         * @param key
         *            密钥,长度必须是8的倍数
         * @return 返回解密后的原始数据
         * @throws Exception
         */
        public String decryptDESCBC(final String src, final String key) throws Exception {
            // --通过base64,将字符串转成byte数组
            final BASE64Decoder decoder = new BASE64Decoder();
            final byte[] bytesrc = decoder.decodeBuffer(src);
    
            // --解密的key
            SecretKey deskey = new SecretKeySpec(key.getBytes("UTF-8"), "DESede");  
            // --向量
            final IvParameterSpec iv = new IvParameterSpec(IV.getBytes("UTF-8"));
    
            final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, deskey, iv);
            final byte[] retByte = cipher.doFinal(bytesrc);
    
            return new String(retByte,"UTF-8");
    
        }
      
    }

你可能感兴趣的:(工具方法)