Java通过使用向量 iv 实现AES算法,CBC模式

public class AESIV {

    private final static String key = "nLnE4JFFbF6eAzjF";
    private final static String iv = "EJ9iIPhzB4I5UDfv";

    public static void main(String[] args) throws Exception {

         String enStr = Encrypt("123213122",key,iv);
         System.out.println("加密的字符串:"+enStr);
         String deStr = Decrypt(enStr,key,iv);
         System.out.println("解密的字符串:"+deStr);
    }

    

    //加密
    private static String Encrypt(String sstr,String skey,String siv) throws Exception {
        if (skey==null){
            log.info("key is null");
            return null;
        }
        if (skey.length()!=16){
            log.info("key is not 16 of length");
        }
        byte[] keyByte = skey.getBytes("utf-8");
        SecretKeySpec keySpec = new SecretKeySpec(keyByte,"AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//算法/模式/补码方式
        byte[] ivByte = siv.getBytes("utf-8");
        IvParameterSpec iv = new IvParameterSpec(ivByte);   //使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE,keySpec,iv);
        byte[] encrype = cipher.doFinal(sstr.getBytes());
        return Base64.getEncoder().encodeToString(encrype);      //此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }
    
    //解密
    private static String Decrypt(String sstr,String skey,String siv) throws Exception {
        try {
                if (skey==null){
                    log.info("key is null");
                    return null;
                }
                if (skey.length()!=16){
                    log.info("key is not 16 of length");
                }
                byte[] keyByte = skey.getBytes("utf-8");
                SecretKeySpec keySpec = new SecretKeySpec(keyByte,"AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//算法/模式/补码方式
                IvParameterSpec iv = new IvParameterSpec(siv.getBytes());   //使用CBC模式,需要一个向量iv,可增加加密算法的强度
                cipher.init(Cipher.DECRYPT_MODE,keySpec,iv);
                byte[] encrype = Base64.getDecoder().decode(sstr);

                byte[] origin = cipher.doFinal(encrype);
                String str = new String(origin);
                return str;

            }catch (Exception e){
                return null;
        }
        
    }

你可能感兴趣的:(Java通过使用向量 iv 实现AES算法,CBC模式)