Регулярное выражение для поиска хэша bcrypt?
Я ищу, чтобы найти строку hash bcrypt, используя regex (в PowerGrep), в базе данных.
Пробовал это регулярное выражение:
{?A-Za-z_0-9.{60}}?
Но совпадения не найдено. Хеш Bcrypt имеет длину 60 символов и начинается с "$ 2y $".
Пример:
$2y$15$nK/B6u765645/lo0867h56546v/BnH5U5g45Aj67u67nMVtrhryt6
Ответы
Ответ 1
Ваше регулярное выражение - {?A-Za-z_0-9.{60}}?
- содержит диапазоны, не входящие в класс символов [...]
, но внутри необязательных фигурных скобок и, таким образом, они представляют последовательности буквенных символов. См. вашу демо-версию regex, чтобы понять, что я имею в виду.
Вы можете использовать следующее регулярное выражение:
^\$2y\$.{56}$
Смотрите демо
^
соответствует началу строки, \$2y\$
соответствует $2y$
буквально (поскольку $
является специальным символом и требует экранирования), а .{56}
- остальные 56 символов.
Ответ 2
Как дополнение к ответу выше от @стрибижева. Хэши bcrypt, с которыми вы можете столкнуться в дикой природе, встречаются в нескольких вариантах, поэтому вам придется модифицировать регулярное выражение, чтобы поймать их все. Возможны следующие варианты:
Часть "Идентификатор алгоритма" хеша может включать в себя:
-
"2"
- первая ревизия BCrypt, которая страдает от незначительного недостатка безопасности и, как правило, больше не используется.
-
"2a"
- некоторые реализации пострадали от очень редкого недостатка безопасности.
-
"2y"
- формат, специфичный для реализации BCrypt crypt_blowfish, идентичный "2a" всем, кроме имени.
-
"2b"
- последняя версия официального алгоритма BCrypt
^\$2[ayb]\$.{56}$
похоже, работает для меня
см. здесь для разбивки хэша bcrypt: Может ли кто-нибудь объяснить, как BCrypt проверяет хеш?
Ответ 3
Используйте это:
^\$2[aby]?\$\d{1,2}\$[.\/A-Za-z0-9]{53}$
Пояснение:
-
\$2[aby]?\$
- соответствует используемому алгоритму. Допустимые значения: 2, 2a, 2y и 2b
-
\d{1,2}\$
- соответствует стоимости или количеству раундов, которые представляют собой целое число от 4 до 31 (включительно)
-
[.\/A-Za-z0-9]{53}
- соответствует соли и хешу с солью, составляющей первые 22 символа, а хешированный пароль составляет последние 31