AES/CBC/PKCS5Padding (128)
阿新 • • 發佈:2018-12-13
/** * AES/ECB/PKCS5Padding (128) * AES加密 ECB模式 PKCS5填充方式 金鑰長度必須為16個位元組(128位) */ public static void main(String[] args) throws Exception { //金鑰生成器 KeyGenerator kgen = KeyGenerator.getInstance("AES"); //設定金鑰長度128位 kgen.init(128, new SecureRandom()); //生成key SecretKey key = kgen.generateKey(); //長度為16的二進位制陣列,金鑰我們自己生成也可以. byte[] keyBytes = key.getEncoded(); System.out.println("keyBytes長度是16 = " + keyBytes.length); //建立AES的金鑰 SecretKeySpec aesKey = new SecretKeySpec(keyBytes, "AES"); //加密 模式 填充方式 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, aesKey); //對abc進行加密,因為明文長度不固定,所以需要先分組在加密,每一組長度16個位元組 //不夠16的需要進行填充,abc的長度是3個位元組,所以要填充13個位元組在進行加密 //所以encrypt的長度為16,因為在加密之前填充了 //如果長度正好為16個位元組,那麼也要新填充一個16長度的組,那麼加密後的encrypt的長度為32 byte[] encrypt = cipher.doFinal("abc".getBytes()); System.out.println(encrypt.length); cipher.init(Cipher.DECRYPT_MODE, aesKey); byte[] decrypt = cipher.doFinal(encrypt); System.out.println(new String(decrypt)); }