正则表达式找到bcrypt哈希?

时间:2015-07-14 21:06:19

标签: regex hash

我希望在数据库中使用regex(在PowerGrep中)找到bcrypt哈希字符串。

试过这个正则表达式:

{?A-Za-z_0-9.{60}}?

但没有找到匹配。 Bcrypt哈希长度为60个字符,以" $ 2y $"。

开头

示例:

$2y$15$nK/B6u765645/lo0867h56546v/BnH5U5g45Aj67u67nMVtrhryt6

3 个答案:

答案 0 :(得分:8)

<强>更新

由于Cos值旁边可能有Tany,您可以使用

a

请参阅regex demo online。的详情

  • b - 字符串的开头
  • ^\$2[ayb]\$.{56}$ - 一个文字^字符(它应该以正则表达式模式转义以匹配文字\$字符,否则,它将表示字符串的结尾)
  • $ - $字符
  • 2 - 一个character class匹配指定集合中的任何一个字符
  • 2 - [ayb]字符
  • \$ - 除了换行符之外的任何56个字符(如果不使用符合POSIX标准的正则表达式引擎,否则,它将匹配任何字符;要匹配常见NFA引擎中的任何字符,请替换$使用.{56}或使用相应的.标志)
  • [\s\S] - 字符串结束。

原始回答

你的正则表达式 - DOTALL - 包含不在字符类$内的范围,但在可选的花括号内,因此它们呈现文字字符序列。请参阅your regex demo了解我的意思。

您可以使用以下正则表达式:

{?A-Za-z_0-9.{60}}?

请参阅demo

[...]匹配字符串的开头,^\$2y\$.{56}$ 字面匹配^(因为\$2y\$是一个特殊字符,需要转义)$2y$是休息56个字符。

答案 1 :(得分:4)

使用此:

^\$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} - 匹配salt和哈希值,前三个字符构成前三个字符,哈希密码构成最后一个字符

答案 2 :(得分:0)

根据Wikipedia,bcrypt散列遵循以下格式:

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
\__/\/ \____________________/\_____________________________/
 Alg Cost      Salt                        Hash

每个细分的有效值为:

  • Alg:22a2b2x2y
  • 费用:4-31(零填充为2位数字)
  • 盐:./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ x 22
  • 哈希:./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ x 31

因此,全面的正则表达式如下所示:

^[$]2[abxy]?[$](?:0[4-9]|[12][0-9]|3[01])[$][./0-9a-zA-Z]{53}$
相关问题