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 № 1Otrzymujesz 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”.