Я понимаю, что на этот вопрос уже был дан ответ, но я использую функцию хеширования. Это реализация PHP PBKDF2 (описанная в RFC 2898):
public static function hash($p, $s, $c = 5000, $kl = null, $a = 'sha256'){
$hl = strlen(hash($a, null, true));
if(is_null($kl)) $kl = $hl;
$kb = ceil($kl/$hl);
$dk = '';
for($block = 1; $block <= $kb; $block++){
$ib = $b = hash_hmac($a, $s.pack('N', $block), $p, true);
for($i = 0; $i < $c; $i++)
$ib ^= ($b = hash_hmac($a, $b, $p, true));
$dk .= $ib;
}
return substr($dk, 0, $kl);
}
Более подробная информация здесь: Шифрование паролей с помощью PHP (Функция, приведенная выше, лишь незначительно изменена в этом месте для предоставления значений по умолчанию)