Java中的AES加解密
阿新 • • 發佈:2017-12-13
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 finalString 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加解密