Тестирование, если строка sha1 в PHP

Я планирую хранить пароли как sha1, поэтому мне нужен способ проверить, что это sha1 в другой точке моего сайта. Я планировал использовать preg_match, но я не знаю, как создавать шаблоны регулярных выражений. Может кто-нибудь помочь мне с одним?

благодаря

Изменить: я не пытаюсь понять, соответствуют ли два хэша.

На самом деле вы можете использовать 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!"; 

ctype_xdigit намного быстрее. Обычно я использую хеши для поиска и считаю это очень полезным.

Сравнивая два хэша SHA1, и вы знаете, что первый из них один (потому что он выходит из базы данных), тогда просто предположите, что второй также является значением SHA1. Вас интересует только если совпадают два хэша или нет. Если одно из сравниваемых значений не является возможным значением SHA1, то оно, в частности, не совпадает с таковым в базе данных. И это все, что вам нужно знать.