/ / Długość wyjścia szyfrowania AES - java, szyfrowanie, aes

Długość wyjścia szyfrowania AES - java, encryption, aes

Używam tego kodu Java do szyfrowania AES:

byte[] iv = new byte[16];

SecretKey aesKey = new SecretKeySpec("hex key here", "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, aesKey, new IvParameterSpec(iv));

return cipher.doFinal("32 characters here ...".getBytes());

Zawsze otrzymuję 48 bajtów danych wyjściowych, ale mam starszą wersję systemu, która oczekuje wejścia 32-bajtowego. Jak można kontrolować długość wyjściową?

Uwaga: Muszę użyć AES CBC

Odpowiedzi:

5 dla odpowiedzi № 1

Otrzymujesz 32 + 16 bajtów z powodu używanego dopełnienia.

Zwykle wypełnianie wypełnia tylko pozostałe bajtydopóki następny blok szyfrów nie będzie pełny. Ale w twoim przypadku tekst jawny wykorzystuje już 2 bloki (2 * 16 bajtów). W takim przypadku nie ma miejsca na zakodowanie informacji „brak konieczności wypełniania”. Dlatego należy dodać jeden dodatkowy blok szyfrów zawierający tylko dane dopełniające.

Być może dotychczasowy system nie korzysta z dopełnienia. Próbować „AES / CBC / NoPadding”.