我希望在数据库中使用regex(在PowerGrep中)找到bcrypt哈希字符串。
试过这个正则表达式:
{?A-Za-z_0-9.{60}}?
但没有找到匹配。 Bcrypt哈希长度为60个字符,以" $ 2y $"。
开头示例:
$2y$15$nK/B6u765645/lo0867h56546v/BnH5U5g45Aj67u67nMVtrhryt6
答案 0 :(得分:8)
<强>更新强>:
由于Cos
值旁边可能有Tan
或y
,您可以使用
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
每个细分的有效值为:
2
,2a
,2b
,2x
或2y
./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
x 22 ./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
x 31 因此,全面的正则表达式如下所示:
^[$]2[abxy]?[$](?:0[4-9]|[12][0-9]|3[01])[$][./0-9a-zA-Z]{53}$