2012-06-14 11 views
6

Próbuję odczytać z pliku i szyfrowania danych za pomocą algorytmu AES w trybie CFB bez wyściółkiAES odcina tekstu w trybie CFB

AES/CFB/NoPadding”. IV ma 16 bitów długości.

Biorąc pod uwagę, że AES domyślnie pracuje z blokami 16-bajtowymi, pomyślałem o zastosowaniu schematu dopełnienia, jeśli korzystałem z CBC lub innego trybu, ale z CFB. CFB zasadniczo nie wymaga wypełniania dla zwykłego tekstu.

Problem polega na tym, że jeśli mój plik zawiera dane, które mają mniej niż 16 bajtów, nic nie zostanie zaszyfrowane. Jeśli jest większa niż 16 bajtów, to tylko pierwsze 16 bajtów zostanie zaszyfrowane.

To wyraźnie wskazuje, że rozmiar bloku się zaczyna i jeśli jest niedomiar lub przepełnienie bajtów w.r.t. rozmiar bloku, następnie dane/bajty są odrzucane.

Czego nie rozumiem podczas korzystania z CFB, nie potrzebuję pad danych .. prawda! Dlaczego więc 16-bitowy domyślny rozmiar bloku AES wchodzi w działanie i obcina dane?

+1

Po napisaniu kodu, którego używasz do szyfrowania. – Robert

Odpowiedz

4

Nie udało się określić liczby bitów, które chcesz wysłać do tego trybu, a tym samym otrzymujesz domyślne 128 bitów. Wygląda na to, że potrzebujesz 8 bitów, dla których powinieneś użyć następującego argumentu do getInstance():

Cipher.getInstance("AES/CFB8/NoPadding");