Как проверить, хэшируется ли строка хэшем Laravel?

#php #regex #laravel #laravel-5 #bcrypt

#php #регулярное выражение #ларавель #laravel-5 #bcrypt ( шифрование )

Вопрос:

В моем проекте, использующем Laravel 5.1 , помимо класса Hash по умолчанию, я также использовал свою библиотеку для хэширования пароля. Итак, как я могу проверить Laravel , хэшируется строка хэшем или нет?
Пример :

 $2y$10$ug8B6Pxs546eQBNICxsEOOH3NgpXjOIo.g4rf1FPZk2xJncWcFUpu
 

Комментарии:

1. Может быть, try-catch расшифрует ее, и если это не удастся, это не так?

2. Какой тип шифрования выполняет эта библиотека? Является ли это односторонним шифрованием, как другая функция хеширования, или двусторонним, поскольку оно поддается расшифровке? Если это еще одно одностороннее шифрование, я думаю, вам не повезло. Если он поддается расшифровке, вы можете попробовать расшифровать все хэши и посмотреть, получите ли вы исключения. Те, которые дают исключения, скорее всего, будут хэшами Laravel по умолчанию

3. @Мартинс. Видите ли hash_password , в наши дни это стандартно.

4. @ArtisticPhoenix приятно, не знал об этой характеристике алгоритма BCRYPT — всегда иметь идентификатор $ 2y $. Тогда предположим, что оператору повезло, если только второй алгоритм не тот же самый и также не имеет идентификатора!

5. Да, я не уверен, что это обязательно часть bcrypt или функции hash_password. Это может быть идентификатор алгоритма для функции пароля. Я не уверен. Но хэши обычно представляют собой одностороннее шифрование и всегда имеют одинаковую длину, например, md5 равен 32, sha1 равен 40, а sha256 равен 60. Обычно достаточно просто проверить длину.

Ответ №1:

Вы можете проверить длину

 if( strlen($hash) == 60 )
 

PASSWORD_BCRYPT — используйте алгоритм CRYPT_BLOWFISH для создания хэша.
Это приведет к созданию стандартного хэша, совместимого с crypt (), используя «$ 2y $»
идентификатор. Результатом всегда будет строка из 60 символов или FALSE
при сбое.

http://php.net/manual/en/function.password-hash.php

Кроме того, вы можете проверить наличие идентификатора $ 2y $. с помощью regx, подобного этому

   preg_match('/^$2y$/', $hash );
 

Или даже с strpos($hash, '$2y$') помощью, хотя я не уверен, какое смещение это выдало бы с моей головы.

Так, например

  $hash = '$2y$10$ug8B6Pxs546eQBNICxsEOOH3NgpXjOIo.g4rf1FPZk2xJncWcFUpu';

 if( strlen($hash) == 60 amp;amp; preg_match('/^$2y$/', $hash ))
 

Вы можете быть уверены, что если она начинается с $2y$ и имеет длину 60, то она хэшируется. Может быть ненулевой шанс, что вы столкнетесь с чем-то подобным, но это практически ноль.

Комментарии:

1. strpos($hash, '$2y$') === 0 🙂

2. Мне это было нужно, чтобы пройти тест с паролями, которые не были хэшированы. Спасибо.