Регулярное выражение для поиска хэша 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