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