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模式
最新推荐文章于 2024-05-14 04:20:25 发布