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

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

Спасибо

Править: Я не пытаюсь видеть, соответствуют ли два хеша.

14
задан Leagsaidh Gordon 5 June 2010 в 21:09
поделиться

2 ответа

На самом деле, вы можете использовать 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!";
46
ответ дан 1 December 2019 в 06:07
поделиться

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

0
ответ дан 1 December 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: