squalylLe 01/09/2016 à 16:05
DES blocs de 64 bits
AES blocs de 128 bits (et clés de 128.192.256 bits)
SHA-256 produit des hash de 32 octets.
Le padding n'est pas anodin pour le déchiffrement. Par défaut le déchiffrement d'une chaine arbitraire paddée inclura le padding, car on ne sait pas enlever un padding composé uniquement de zéro (le dernier octet du message peut être un zéro légitime, même si la taille des données est un multiple de la taille du bloc).
On a de la chance avec des chaines C ASCII car on peut remplacer le bloc de zéro final par un simple zéro de fin de chaine, mais ca ne fonctionne pas avec des données arbitraires.
Dans ce cas il faut un "Mandatory padding" défini comme suit:
-on ajoute SYSTEMATIQUEMENT un octet 0x80
-on padde avec des zéros pour arriver au multiple de bloc
note: Si la taille des données a déja la taille du bloc, ben le padding est la quand même.
De cette manière au déchiffrement, on peut retrouver la taille des données originales:
-on enlève tous les zéros de la fin jusqu'a tomber sur 0x80
-on enlève 0x80
-profit!
Ca marche car le padding est 'mandatory', on sait avec certitude qu'il est la même si les données ont la taille des blocs, et qu'il faut l'enlever.