1. 程式人生 > 其它 >AES加密工具類和呼叫示例

AES加密工具類和呼叫示例

技術標籤:JAVA加密解密加密解密javarsa

  1. 工具類程式碼
public class AESEncryptUtil {
     //private static final transient Logger log = LoggerFactory.getLogger(AESEncryptUtil.class);

     public AESEncryptUtil() {
     }

     public static byte[] encrypt(byte[] bytes, String password) {
         try {
             KeyGenerator e =
KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(password.getBytes("utf-8")); e.init(128, secureRandom); SecretKey secretKey = e.generateKey(); byte
[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(1, key, getSpec(cipher, secureRandom)); return cipher.doFinal
(bytes); } catch (Exception var8) { //log.error(var8.getMessage(), var8); var8.printStackTrace(); System.out.println("AESEncryptUtil exception:" + var8.getMessage()); return null; } } public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator e = KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(password.getBytes("utf-8")); e.init(128, secureRandom); SecretKey secretKey = e.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(2, key, getSpec(cipher, secureRandom)); return cipher.doFinal(content); } catch (Exception var8) { //log.error(var8.getMessage(), var8); var8.printStackTrace(); System.out.println("AESEncryptUtil exception:" + var8.getMessage()); return null; } } private static AlgorithmParameterSpec getSpec(Cipher cipher, SecureRandom secureRandom) { byte[] iv = new byte[cipher.getBlockSize()]; secureRandom.nextBytes(iv); IvParameterSpec ivspec = new IvParameterSpec(iv); return ivspec; } }
  1. 呼叫示例
public static  void main(String[] args) throws Exception{
        byte[] encrypt = AESEncryptUtil.encrypt("HZT_2020".getBytes(), "123");
        String s = DatatypeConverter.printHexBinary(encrypt);
        System.out.println(s);
        byte[] bytes = DatatypeConverter.parseHexBinary(s);
        byte[] decrypt = AESEncryptUtil.decrypt(bytes, "123");
        String mm = new String(decrypt,"UTF-8");
        System.out.println(mm);

    }
  1. 測試結果
    在這裡插入圖片描述
  2. 參考文章
    用到了工具類:javax.xml.bind.DatatypeConverter ,將byte陣列轉化為16進位制字串輸出。之前沒用此工具類方法時,解密時報錯:
    Input length must be multiple of 16 when decrypting with padded cipher。
    參考文章地址,點此進入