1. 程式人生 > >Java中的AES加解密

Java中的AES加解密

body 方式 keys enc aes加密 col decode 解密 encoder

直接上代碼,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; } }

Java中的AES加解密