Bonjour LittleFairy,
En voila une problématique qui m'a intriguée...
Pour essayer de reproduire ton problème, j'ai simplifier ton code au maximum pour obtenir un jeu d'essai complet :
- qui effectue le chiffrement d'un fichier
- puis le déchiffrement du fichier obtenu
- et enfin compare les 2 fichiers pour voir si ils sont identiques.
<?php
/* Paramètres */
$file = 'test.avi';
$cryptfile = 'test_encrypt.avi';
$decryptfile = 'test_decrypt.avi';
$inputKey = "encryptor key";
$blockSize = 256;
include 'AES.php';
/* 1) Chiffrement */
$aes = new AES(file_get_contents($file), $inputKey, $blockSize);
file_put_contents($cryptfile, $aes->encrypt());
echo "Chiffrement OK <hr />";
/* 2) Déchiffrement */
$aes = new AES(file_get_contents($cryptfile), $inputKey, $blockSize);
file_put_contents($decryptfile, $aes->decrypt());
echo "Dechiffrement OK <hr />";
/* 3) Vérification d'intégrité */
if (md5_file($file)===md5_file($decryptfile)) {
echo "<h2 style='color:green'>SUCCES : Fichier d'origine et Fichier chiffre+dechiffre identique !</h2>";
}else{
echo "<h2 style='color:red'>ERREUR : Fichier d'origine et Fichier chiffre+dechiffre NON identique !</h2>";
}
Et là... je constate alors le même problème que toi :-/
Après analyse des 2 fichiers (l'original et sa pseudo-copie chiffrée+déchiffrée) avec un éditeur hexa, j'ai remarqué qu'effectivement ce sont les derniers octets qui ont disparus...
... mais que ces octets étaient nuls
Et là, j'ai eu une intuition qui s'est vérifiée

En fait pour effectuer un chiffrement AES, on est obligé de découper le fichier original en blocs. Et pour remplir le dernier bloc, on effectue du bourrage (ou padding en anglais), c'est à dire qu'on ajoute des octets nuls. Et donc au déchiffrage on retire ces bits de bourrage.
Or si le fichier d'origine se termine par des octets nuls, le fichier chiffré+déchiffré n'aura plus ces octets nuls à la fin car ces octets nuls seront considérés comme des bits de bourrage
Pour s'en assurer, il suffit de prendre le fichier récupéré après l'opération de chiffrement+déchiffrement, et de refaire la même opération comme si c'était lui qui était le fichier d'origine.
Comme il ne se termine pas par des bits nuls, alors cette fois-ci, on récupère exactement le même fichier
