【发布时间】:2017-09-06 04:51:00
【问题描述】:
我对@987654321@ 填充的理解是,它们在加密之前将字节添加到纯文本中,因此最后一个块已满。一旦密文被解密,就会检查最后一个块,填充字节标记哪些字节是填充的,哪些是纯文本。
当我在 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);
8
【问题讨论】:
标签: java cryptography aes pkcs#7