Jako że chcę haszować string podany przez użytkownika przed porównaniem ich w bazie potrzenuję użyć funkcji OLD_PASSWORD();
Poniższa implementacja...
function mysql_old_password_hash($input) { $nr = 1345345333; $add = 7; $nr2 = 0x12345671; $tmp = null; for ($i = 0; $i < $inlen; $i++) { if ($byte == ' ' || $byte == "\t") continue; $tmp = ord($byte); $nr ^= ((($nr & 63) + $add) * $tmp) + (($nr << 8) & 0xFFFFFFFF); $nr2 += (($nr2 << 8) & 0xFFFFFFFF) ^ $nr; $add += $tmp; } $out_a = $nr & ((1 << 31) - 1); $out_b = $nr2 & ((1 << 31) - 1); if ($hex) return $output; return hex_hash_to_bin($output); }
działa w porządku na moim localhoście ze starym phpem 5.2.5, natomiast "na produkcji" z php 5.2.11 już nie - tj zwracany jest błędny wynik - inny string niż powinien.
Pytanie - co mogę zmienić w tym skrypcie żeby to naprawić? Ktoś wie jakie są różnice pomiędzy tymi wersjami php mogące wpłynąć na wynik działania tej funkcji - ew może ktoś posiada inną implementację będącą odporną na zmienę wersji php?
Proszę o pomoc.