Je suis en train de porter du code de VB.NET vers PHP et je tombe sur un petit os. Dans mon code VB.NET j'ai une fonction qui chiffre une variable texte avec AES-256. Ce chiffrement est dispo sous PHP mais à un détail près: la fonction AES256 sous VB.NET prend une clef ainsi qu'un 'salt' là où en PHP je ne peux spécifier qu'une clef et non un salt mais un vecteur d'initialisation aléatoire sur lequel je n'ai pas la main. De plus PHP me renvoie un warning sur la clef qui serait trop longue pour cette algo (la clef fait 135 caractères). J'ai un jeu de test pour comparer (chaine chiffrée en base64 encodée en VB.NET et en PHP) et effectivement ça ne correspond pas (dû au fait que je n'arrive pas à passer à PHP mon salt d'origine et sans doute aussi car la clef doit être trop grande).
Un aperçu du code VB.NET (clef et salt modifiés) pour que vous puissiez avoir une vue d'ensemble:
string clef = "AAAA..."; // (coupée ici) chaine de 135 caractères (chaine alphanumérique de 45 caractères répétée 3 fois)
string salt = "sss..."; // chaine de 16 caractères alphanumériques (dont 2 espaces à la fin sans doute pour du padding)
eb_c_CipherClass ebCCipherClass = new eb_c_CipherClass();
Array array = null;
// la ligne que j'aimerai porter en PHP
array = ebCCipherClass.EncryptString(EB_CRYPT_CIPHER_ALGORITHM.EB_CRYPT_CIPHER_ALGORITHM_RIJNDAEL_CBC_256, clef, salt, "JE SUIS UNE CHAINE A CHIFFRER");
byte[] numArray = new byte[checked(checked(array.get_Length() - 1) + 1)];
array.CopyTo(numArray, 0);
string base64String = Convert.ToBase64String(numArray);
Et voici le prototype de la fonction EncryptString (je n'ai aps le source de cette fonction)
public virtual extern Array EncryptString([In][ComAliasName("ebCryptLib.EB_CRYPT_CIPHER_ALGORITHM")] EB_CRYPT_CIPHER_ALGORITHM algorithm, [In] string passPhrase, [In] string salt, [In] string plainText);
La lib utilisée est ebcrypt, une sorte de wrapper qui utilise en dessous les libs open source genre openssl. Le site existe toujours mais est vide, il est cependant dispo sur webarchive même si je n'ai pas trouvé d'avantage de docs que la page d'accueil: http://web.archive.org/web/20050206153815/http://www.ebcrypt.com/
Et voici la fonction que j'essaye d'utiliser en PHP: http://php.net/manual/fr/function.mcrypt-encrypt.php
$data = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key,$data, MCRYPT_MODE_CBC, $salt);
Mais il m'envoie bouler et le résultat final (après encodage en base64) ne correspond pas à celui de mon jeu de test...
C'est le dernier bout de code qu'il me reste à porter sur cette grosse appli et loi de Murphy oblige il se trouve que c'est le plus critique. Si on réussit à porter ce code c'en est fini de ce projet! Donc je suis vraiment preneur de votre aide là-dessus!
