Het hangt af van de MySQL-versie zoals hierboven beschreven. Volgende MySQL-documentatie voor versie 5.5:
"Als een toepassing waarden opslaat van een functie zoals MD5() of SHA1() die een reeks hexadecimale cijfers retourneert, kunnen efficiëntere opslag en vergelijkingen worden verkregen door de hexadecimale weergave naar binair te converteren met UNHEX() en het resultaat op te slaan in een BINARY(N)-kolom. Elk paar hexadecimale cijfers vereist één byte in binaire vorm, dus de waarde van N hangt af van de lengte van de hex-tekenreeks. N is 16 voor een MD5()-waarde en 20 voor een SHA1()-waarde ."
Dus in plaats van de MySQL-versie te downgraden, kunt u het volgende doen:
- verander het type 'wachtwoord' kolom van varchar(32) in binair(16)
- voeg 'UNHEX()' MySQL-functie toe aan uw MySQL-query in ZF-code, bijvoorbeeld:
$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'user',
'login',
'password',
'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);
In mijn geval werkt het goed.
Bewerken --Als je wachtwoordsalt ook is opgeslagen in een binaire kolom (bijv. als het ook een hex-tekenreeks was die werd gegenereerd door de SHA1-functie), dan zou de laatste parameter van de Zend_Auth_Adapter_DbTable moeten zijn:'UNHEX(SHA1(CONCAT(?, LOWER() HEX(salt)))))'Dus we converteren het zout terug naar een kleine hexadecimale tekenreeks voordat we het samenvoegen met het wachtwoord. HEX() retourneert je salt in hoofdletters, dus je kunt de LOWER()-aanroep gewoon weglaten als je salt oorspronkelijk in hoofdletters was voordat je het opsloeg met UNHEX().