Cela dépend de la version de MySQL comme décrit ci-dessus. Suite aux documentations MySQL pour la version 5.5 :
"Si une application stocke les valeurs d'une fonction telle que MD5() ou SHA1() qui renvoie une chaîne de chiffres hexadécimaux, un stockage et des comparaisons plus efficaces peuvent être obtenus en convertissant la représentation hexadécimale en binaire à l'aide de UNHEX() et en stockant le résultat dans une colonne BINARY(N). Chaque paire de chiffres hexadécimaux nécessite un octet sous forme binaire, de sorte que la valeur de N dépend de la longueur de la chaîne hexadécimale. N est 16 pour une valeur MD5() et 20 pour une valeur SHA1() ."
Ainsi, au lieu de rétrograder la version de MySQL, vous pouvez procéder comme suit :
- modifier le type de colonne 'password' de varchar(32) à binary(16)
- ajoutez la fonction MySQL 'UNHEX()' à votre requête MySQL dans le code ZF, par exemple :
$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'user',
'login',
'password',
'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);
Cela fonctionne bien dans mon cas.
Edit --Si votre sel de mot de passe est également stocké dans une colonne binaire (par exemple, s'il s'agissait également d'une chaîne hexadécimale générée via la fonction SHA1), alors le dernier paramètre de Zend_Auth_Adapter_DbTable devrait être :'UNHEX(SHA1(CONCAT(?, LOWER( HEX(salt)))))'Ainsi, nous reconvertissons le sel en une chaîne hexadécimale minuscule avant de concaténer avec le mot de passe. HEX() renvoie votre sel en majuscule afin que vous puissiez simplement omettre l'appel LOWER() si votre sel était à l'origine en majuscule avant de le stocker à l'aide de UNHEX().