73 votes

Taille des données après le cryptage AES

Je voudrais connaître la taille des données après le cryptage AES afin d'éviter de mettre en mémoire tampon mes données post-AES (sur le disque ou en mémoire) principalement pour connaître la taille.

J'utilise 128 bit AES et javax.crypto.Cipher et javax.crypto.CipherInputStream pour le cryptage.

Quelques tests effectués avec différentes tailles d'entrée montrent que la taille de post-cryptage calculée comme ci-dessous est correcte :

long size = input_Size_In_Bytes; 
long post_AES_Size = size + (16 - (size % 16));

Mais je ne suis pas sûr que la formule ci-dessus soit applicable à toutes les tailles d'entrée possibles.

Existe-t-il un moyen de calculer la taille des données après l'application du cryptage AES - à l'avance sans avoir à mettre en mémoire tampon les données cryptées (sur le disque ou en mémoire) pour connaître leur taille après le cryptage ?

Merci.

102voto

ZZ Coder Points 36990

AES a une taille de bloc fixe de 16 octets, quelle que soit la taille de la clé. En supposant que vous utilisez le padding PKCS 5/7, utilisez cette formule,

 cipherLen = (clearLen/16 + 1) * 16;

Veuillez noter que si le texte en clair est multiple de la taille du bloc, un nouveau bloc entier est nécessaire pour le remplissage. Disons que votre texte en clair est de 16 octets. Le texte chiffré prendra 32 octets.

Vous pouvez vouloir stocker le vecteur initial (IV) avec le texte de chiffrement. Dans ce cas, vous devez ajouter 16 octets supplémentaires pour IV.

36voto

Remus Rusanu Points 159382

AES, en tant que chiffrement par blocs, ne modifie pas la taille. La taille d'entrée est toujours la taille de sortie.

Mais AES, étant un chiffrement par blocs, exige que l'entrée soit un multiple de la taille du bloc (16 octets). Pour cela, Systèmes de rembourrage sont utilisés comme le populaire PKCS5 . La réponse est donc que la taille de vos données cryptées dépend du schéma de remplissage utilisé. Mais en même temps tous Les schémas de remplissage connus arrondiront à la taille du module 16 suivant (AES a une taille de bloc de 16 octets).

8voto

Jerry Coffin Points 237758

Cela dépend du mode dans lequel vous utilisez AES. Ce que vous avez est exact pour la plupart des modes orientés bloc, tels que ECB et CBC. En revanche, en mode CFB (pour un exemple), vous utilisez simplement AES pour produire un flux d'octets, que vous combinez avec les octets de l'entrée. Dans ce cas, la taille de la sortie peut rester la taille de l'entrée plutôt que d'être arrondie à la taille du bloc suivant comme vous l'avez indiqué ci-dessus.

4voto

In silico Points 30778

Le chiffrement AES fonctionne toujours sur des blocs de 16 octets (128 bits). Si le nombre d'octets d'entrée n'est pas un multiple exact de 16, il est complété. C'est pourquoi 16 semble être le "chiffre magique" dans votre calcul. Ce que vous avez devrait fonctionner pour toutes les tailles d'entrée.

1voto

wRAR Points 13223

AES fonctionne par blocs de 128 bits (16 octets) et convertit les blocs de texte clair en blocs de texte chiffré de même longueur. Il rembourre le dernier bloc s'il est plus court que 16 octets, donc votre formule semble correcte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X