Я - планирование хранения паролей как sha1, таким образом, мне нужен способ проверить это, это - sha1 в другой точке в моем веб-сайте. Я был планированием использования preg_match, но я не знаю, как сделать regex шаблоны. Кто-то мог выручить меня с одним?
Спасибо
Править: Я не пытаюсь видеть, соответствуют ли два хеша.
На самом деле, вы можете использовать preg_match ()
, чтобы убедиться, что это шестнадцатеричная строка из 40 символов как таковая:
function is_sha1($str) {
return (bool) preg_match('/^[0-9a-f]{40}$/i', $str);
}
Чтобы объяснить шаблон:
/ Открывающий разделитель
^ Начало привязки строки
[0-9a-f] Любой из следующих символов: 0123456789abcdef
{40} Повторяется 40 раз
$ End Of String Anchor
/ Closing Delimiter
i Модификатор: поиск без учета регистра
Если вы пытаетесь убедиться, что хэш sha1 ()
совпадает с паролем провайдера пользователя, вы просто перепишете его следующим образом:
if($db_hash == sha1($user_provided_pass))
echo "Password is correct!";
При сравнении двух SHA1-хэшей, когда вы знаете, что первый является единицей (потому что он получен из базы данных), то просто предположите, что второй также является SHA1-значением. Вас интересует только то, совпадают ли два хэша или нет. Если одно из сравниваемых значений не является возможным значением SHA1, то оно, в частности, не совпадает с тем, что находится в базе данных. И это все, что вам нужно знать.