2017-05-21 5 views
1

J'ai mis en œuvre AES en C et je suis en train de finaliser le programme en mettant en place un remplissage. Lire beaucoup d'autres questions SO sur le sujet de remplissage J'ai trouvé qu'une manière populaire de faire ceci est de remplir chacune des places restantes dans l'état avec le nombre de places restantes. Par exemple, si j'avais seulement 12 octets à chiffrer, je remplirais les 4 octets restants avec 4. Ma question est de décrypter si j'ai un bloc qui est plein mais se termine par un 1, comment puis-je savoir si c'est un octet de rembourrage ou juste la valeur 1? AVIS DE NON-RESPONSABILITÉ: Je sais que ce programme ne devrait jamais être utilisé en production, car il présente probablement toutes sortes d'insécurités différentes. Je fais cela pour m'amuser, pas pour crypter les documents les plus secrets.AES ambiguïté de remplissage

+0

Si vous voulez voir mon code c'est ici: https://gist.github.com/dangee1705/80b110f764914847eea33391db7ed398 –

Répondre

5

Ce que vous décrivez est le PKCS#7 padding.

Afin de désambiguïser, vous devez toujours avoir un rembourrage. De plus, le texte en clair pour les modes comme le mode ECB ou CBC doit être un multiple de la taille du bloc.

Les deux contraintes mises ensemble conduisent à une solution simple: vous toujours ajouter un rembourrage jusqu'à la prochaine multiple de la taille du bloc. Si le texte en clair est déjà un multiple de la taille du bloc, alors vous ajoutez un bloc complet de remplissage où chaque octet représente 16 (pour AES).

+0

merci je n'ai pas vu cette partie de la page pour une raison quelconque –