我正在使用一种非常标准的Java AES加密/解密方式。
byte[] key = hexStringToByteArray("C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF");
byte[] message = hexStringToByteArray("01A0A1A2A3A4A5A6A703020100060001");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(message);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] original = cipher.doFinal(encrypted);
您可以看到,我正在使用128位密钥和128位消息。基本上我总是得到了我期望的结果,然而,加密结果总是256位长。第二个128位始终相同。除了截断结果外,如何确保密码返回仅前128位,而不改变前128位?我感觉在这里块大小的定义有些混淆。
PKCS5
填充都会在密文恰好为块大小时始终添加完整的块填充。否则,您将如何确定填充与密文之间的区别。 - jbtuleCTR
模式与初始化向量,正如Zim-Zam O'Pootertoot
所提到的,因为它可以处理任意长度的数据而不需要填充。 - laz