2012-06-14 16 views
6

Estoy tratando de leer desde un archivo y cifrar los datos utilizando AES en modo CFB sin rellenocifrado AES corta texto en el modo CFB

'AES/CFB/NoPadding'. El IV tiene 16 bytes de longitud.

Dado que AES, por defecto, funciona con bloques de 16 bytes, hubiera pensado utilizar un esquema de relleno si estuviese utilizando CBC o cualquier otro modo, pero CFB. CFB esencialmente no requiere relleno para texto sin formato.

Así que el problema es que si mi archivo contiene datos que son menos de 16 bytes, nada se cifra. Si es mayor que 16 bytes, solo los primeros 16 bytes se cifran.

Esto indica claramente que el tamaño de bloque está entrando y si hay un subdesbordamiento o desbordamiento de bytes w.r.t. el tamaño del bloque, luego los datos/bytes se descartan.

Lo que no entiendo es cuando uso CFB, no necesito rellenar los datos ... ¡bien! Entonces, ¿por qué el tamaño de bloque predeterminado de 16 bytes de AES entra en acción y trunca los datos?

+1

Publique el código que está utilizando para el cifrado. – Robert

Respuesta

4

Ha fallado al especificar la cantidad de bits que desea enviar para ese modo y, por lo tanto, obtiene los 128 bits predeterminados. Parece que quiere 8 bits, para lo cual debe usar el siguiente argumento para getInstance():

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