Aes 加密两种方式为什么加出来的不一样?求大神讲解
第一种
1 /** 2 * 加密 3 * @param content 4 * @param keyBytes 5 * @param iv 6 * @return 7 * @throws Exception 8 */ 9 public String AES_CBC_Encrypt(byte[] content, byte[] keyBytes, byte[] iv) throws Exception{ 10 try{ 11 KeyGenerator keyGenerator= KeyGenerator.getInstance("AES"); 12 keyGenerator.init(128, new SecureRandom(keyBytes) ); 13 SecretKey key=keyGenerator.generateKey(); 14 Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); 15 cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv)); 16 byte[] result=cipher.doFinal(content); 17 return Base64.encodeBase64String(result); 18 }catch (Exception e) { 19 e.printStackTrace(); 20 throw e; 21 } 22 } 23 24 /** 25 * 解密 26 * @param content 27 * @param keyBytes 28 * @param iv 29 * @return 30 * @throws Exception 31 */ 32 public String AES_CBC_Decrypt(byte[] content, byte[] keyBytes, byte[] iv) throws Exception{ 33 try{ 34 35 KeyGenerator keyGenerator=KeyGenerator.getInstance("AES"); 36 keyGenerator.init(128, new SecureRandom(keyBytes));//key长可设为128,192,256位,这里只能设为128 37 SecretKey key=keyGenerator.generateKey(); 38 Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); 39 cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv)); 40 41 byte[] result=cipher.doFinal(content); 42 return Base64.encodeBase64String(result); 43 }catch (Exception e) { 44 e.printStackTrace(); 45 throw e; 46 } 47 }
第二种
1 /** 2 * 提供密钥和向量进行加密 3 * 4 * @param sSrc 5 * @param key 6 * @param iv 7 * @return 8 * @throws Exception 9 */ 10 public static String Encrypt(String sSrc, byte[] key, byte[] iv) throws Exception { 11 SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); 12 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式" 13 IvParameterSpec _iv = new IvParameterSpec(iv);// 使用CBC模式,需要一个向量iv,可增加加密算法的强度 14 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv); 15 byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); 16 return Base64.encodeBase64String(encrypted); 17 } 18 /** 19 * 提供密钥和向量进行解密 20 * 21 * @param sSrc 22 * @param key 23 * @param iv 24 * @return 25 * @throws Exception 26 */ 27 public static String Decrypt(String sSrc, byte[] key, byte[] iv) throws Exception { 28 SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); 29 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 30 IvParameterSpec _iv = new IvParameterSpec(iv); 31 cipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv); 32 byte[] encrypted = Base64.decodeBase64(sSrc); 33 byte[] original = cipher.doFinal(encrypted); 34 return new String(original, "utf-8"); 35 }