Java中的AES加解密
直接上代码,Base64使用的是Java8的方法,如没有,替换即可
KEY:即密码
IV:即偏移量,可自订,十六位
加密方式:AES/CBC/PKCS5Padding,128位加密
如果想用256位和PKCS7Padding需要额外导入包
import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; /** * 加解密工具 * * @author hackyo * Created on 2017/12/13 18:33. */ public final class Encrypt { private static final String CBC_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; private static final String KEY = "aaaaaaaa"; private static final String IV = "abcdefghijklm123"; private static SecretKey secretKey; static { try { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128, new SecureRandom(KEY.getBytes())); secretKey = new SecretKeySpec(keyGenerator.generateKey().getEncoded(), "AES"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } public static void main(String[] args) { String original = "加密我"; String encodedText = aesEncode(original); System.out.println("密文(Base64加密后的密文)" + encodedText); System.out.println("原文(解密后)" + aesDecode(encodedText)); } /** * AES加密 * * @param original 原文 * @return 密文 */ public static String aesEncode(String original) { try { Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes())); return Base64.getEncoder().encodeToString(cipher.doFinal(original.getBytes())); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null; } /** * AES解密 * * @param ciphertext 密文 * @return 原文 */ public static String aesDecode(String ciphertext) { try { Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes())); return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext))); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null; } }