java中AES+BASE64双重加密及解密

在java中AES+BASE64双重加密及解密

话不多说直接上代码,具体细节请看注释。

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
     * 加密方法
     * @param data  要加密的数据
     * @param key 加密key
     * @param iv 加密iv
     * @return 加密的结果
     */
  public static String encrypt(String data, String key, String iv){
        try {

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"
            int blockSize = cipher.getBlockSize();

            byte[] dataBytes = data.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }

            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);

            return new Base64().encodeToString(encrypted);

        } catch (Exception e) {
                e.printStackTrace();
        }
    }

  /**
     * 解密方法
     * @param data 要解密的数据
     * @param key  解密key
     * @param iv 解密iv
     * @return 解密的结果
     */
    public static String desEncrypt(String data, String key, String iv){
        try {
            if(data.isEmpty()){
                return data;
            }
            byte[] encrypted1 = new Base64().decode(data);

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

            byte[] original = cipher.doFinal(encrypted1);
            return new String(original);
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}
 /** 
     * BASE64解密 
     *  
     * @param key 
     * @return 
     * @throws Exception 
     */  
    public static byte[] decryptBASE64(String key) throws Exception {  
        return (new BASE64Decoder()).decodeBuffer(key);  
    }  
       
    /** 
     * BASE64加密 
     *  
     * @param key 
     * @return 
     * @throws Exception 
     */  
    public static String encryptBASE64(byte[] key) throws Exception {  
        return (new BASE64Encoder()).encodeBuffer(key);  
    }  
  /***
     * AES+BASE64加密
     * @param id
     * @return
     */
    public String encryption(String id) {
        AesEncryptUtil aesEncryptUtil = new AesEncryptUtil();
        String decryptId= aesEncryptUtil.encrypt(id, AesEncryptUtil.KEY, AesEncryptUtil.IV);
        String baseId= "";
        try {
            baseId= FqlUtil.encryptBASE64(decryptId.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return baseId;
    }
    
  /***
     * AES+BASE64解密
     * @param id
     * @return
     */
    public String decrypt(String id) {
        String decryptId = FqlUtil.getBase64(id);
        String index = AesEncryptUtil.desEncrypt(decryptId, AesEncryptUtil.KEY, AesEncryptUtil.IV);
        index = index.trim();
        return index;
    }   

你可能感兴趣的:(java)