2008-12-04 12 views
5

Używam szyfru AES z 16-bajtowym rozmiarem bloku.Java Cipher - AES Padding Problem

Jeśli spróbuję zaszyfrować ciąg 16-bajtowy, nie mam żadnych problemów, ale każda inna długość, a nie wielokrotność liczby 16, rzuca wyjątek.

Wiem, że przy pomocy 3-DES można określić rodzaj wypełnienia jako część algorytmu i jest on obsługiwany bez dodatkowej pracy (na przykład DES/CBC/PKCS5Padding), ale czy istnieje sposób na określenie tego z AES?

Czy muszę ręcznie spakować pytki do wielokrotności liczby 16, a następnie rozebrać je po odszyfrowaniu? Oto skrócona próbka kodu.

encrypt = Cipher.getInstance("AES", provider); 
encrypt.init(Cipher.ENCRYPT_MODE, key) ; 
byte[] encrypted = encrypt.doFinal(plainTxt.getBytes()) ; 

Wszelkie odpowiedzi zostały docenione!

Dzięki z góry, Ciarán

+2

Komentarz pedantyczny: AES ma tylko 16-bajtowe bloki z definicji. Rijndael (oryginalna nazwa i specyfikacja) miał bloki 16, 24 i 32 bajty, ale do użytku w AES dozwolone jest tylko 16 bloków bajtowych. Rijndael wspierał również klawisze 128, 160, 192, 224, 256, ale tylko AES obsługuje tylko 128, 192 i 256. –

Odpowiedz

5

Powinien działać dokładnie tak samo z AES, czyli tryb wyściółka musi zostać określony wraz z szyfrem. Które z trybów dopełniania są zaimplementowane, zależy od dostawcy i powinno być opisane w jego dokumentacji.

Zgodnie z dokumentacją JCE: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA standardowe tryby dopełnienie jak PKCS5Padding powinien być zawsze wspierany (przynajmniej tak to interpretuję go).

+0

Chłopcze, czy jestem zaznajomiony z tą stroną :) Kiedy mówisz o usługodawcy, masz na myśli implementację JCE, z której korzystam? Sprawdzę dokumenty na ten temat. –

+0

Tak, dostawca (drugi parametr w metodzie getInstance()) w zasadzie implementuje interfejs Cipher. Możesz mieć aktywnych więcej niż jednego dostawcę kryptografii. JDK firmy Sun jest dostarczany z preinstalowanym dostawcą SunJCE. –

+0

Ponieważ koduję "dowód koncepcji" AES przez Java/Coldfusion, zaimplementowałem własne wypełnianie przy użyciu metody 2 opisanej tutaj: http: //www.di-mgt. com.au/cryptopad.html. Mogę bliżej przyjrzeć się prawdziwemu. Zaznaczę to jednak jako odpowiedź. –

Powiązane problemy