Я использовал следующий код для шифрования данных. Мой вход 16 байт, а ключ - 16 байт, но вывод, который я получаю (зашифрованные данные), составляет 32 байта. Зачем?Почему шифрование AES 128 расширяет данные?
public static byte[] encrypt(byte[] plainText, byte[] key) {
try {
byte[] passwordKey128 = Arrays.copyOfRange(key, 0, 16);
SecretKeySpec secretKey = new SecretKeySpec(passwordKey128, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = cipher.doFinal(plainText);
// String encryptedString = Base64.getEncoder().encodeToString(cipherText);
return cipherText;
В чем причина? Добавляет ли AES некоторые данные?
Возможный дубликат [Где разместить информацию о длине заполнения?] (Http://stackoverflow.com/questions/26930911/where-to-put-information-about-padding-length) –
Согласно стандарту, AES имеет размер блока - 128 бит. Другими словами, другие размеры блоков нестандартны. Вы цитируете не раскрывает, что делает функция разработчика программного обеспечения «cipher.doFinal()». Итак, ИМХО, лучше попросить разработчика вашего программного обеспечения объяснить феномен, который вы наблюдали. –
Общие рекомендации: ** Всегда используйте полностью исписанную строку Cipher. ** 'Cipher.getInstance (« AES »);' может приводить к разным шифрам в зависимости от поставщика безопасности по умолчанию. Это, скорее всего, приводит к '' AES/ECB/PKCS5Padding'', но это необязательно. Если он изменится, вы потеряете совместимость между разными JVM. –