0
我對PKCS5 and PKCS7填充的理解是,它們在加密之前將純字節添加到純文本中,因此最後一個塊已滿。密碼文本解密後,將檢查最後一個塊,填充字節標記如何填充哪些字節以及哪些是純文本。Java不添加PKCS5填充
當我用Java中的128位AES和PKCS5加密8個字節(小於一個塊)時,doFinal()
的結果只有8個字節。
PKCS7沒有應用,或者我錯過了它的工作原理嗎?
Random secureRandom = new SecureRandom();
byte[] ctr = new byte[16];
byte[] keyBytes = new byte[16];
secureRandom.nextBytes(ctr);
secureRandom.nextBytes(keyBytes);
IvParameterSpec ivSpec = new IvParameterSpec(ctr);
Key key = new SecretKeySpec(keyBytes, "AES");
byte[] plainText = new byte[8];
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
byte[] cipherText = cipher.doFinal(plainText);
System.out.println(cipherText.length);
開發人員不會很好地處理錯誤,只要看一下'PKCS5Padding'選項,開發人員就懶得支持正確的'PKCS7Padding'選項,從而引起混淆:他們不關心(非importa)! – zaph