我希望在数据库中使用regex(在PowerGrep中)找到bcrypt哈希字符串.
试过这个正则表达式:
{?A-Za-z_0-9.{60}}?
Run Code Online (Sandbox Code Playgroud)
但没有找到匹配.Bcrypt哈希长度为60个字符,以"$ 2y $"开头.
例:
$2y$15$nK/B6u765645/lo0867h56546v/BnH5U5g45Aj67u67nMVtrhryt6
Run Code Online (Sandbox Code Playgroud)
小智 23
正如@stribizhev上面的答案的补充.你可能在野外遇到的bcrypt哈希有几个变种,所以你可能需要修改正则表达式以捕获所有这些哈希.变化如下:
散列的"算法标识符"部分可以包括:
"2" - BCrypt的第一次修订版,它存在轻微的安全漏洞,通常不再使用.
"2a" - 一些实现遭受了非常罕见的安全漏洞.
"2y" - 特定于crypt_blowfish BCrypt实现的格式,除了名称以外的所有格式都与"2a"相同.
"2b" - 官方BCrypt算法的最新版本
^\$2[ayb]\$.{56}$
Run Code Online (Sandbox Code Playgroud)
似乎对我有用
请参阅此处了解bcrypt哈希的细分:有人可以解释BCrypt如何验证哈希?
更新:
由于旁边的y值有可能是a或者b,你可以使用
^\$2[ayb]\$.{56}$
Run Code Online (Sandbox Code Playgroud)
^ - 开始一个字符串\$- 一个文字$字符(它应该以正则表达式模式转义以匹配文字$字符,否则,它将表示字符串的结尾)2- 一个2炭[ayb]- 匹配指定集合中任何单个char 的字符类\$- 一个$炭.{56}-任何比换行符字符其他56个字符(如果不是符合POSIX正则表达式引擎被使用,否则,它将匹配任何字符;以匹配在共同NFA引擎任何字符,替换.用[\s\S]或使用对应的DOTALL标志)$ - 字符串结尾.原始答案
你的正则表达式 - {?A-Za-z_0-9.{60}}?包含不在字符类[...]中但在可选花括号内的范围,因此它们呈现文字字符序列.看看你的正则表达式演示,看看我的意思.
您可以使用以下正则表达式:
^\$2y\$.{56}$
Run Code Online (Sandbox Code Playgroud)
见演示
本^场比赛字符串的开头,\$2y\$匹配$2y$字面上(作为$是一个特殊字符,需要转义),并.{56}在其余的56个字符.
用这个:
^\$2[aby]?\$\d{1,2}\$[.\/A-Za-z0-9]{53}$
Run Code Online (Sandbox Code Playgroud)
说明:
\$2[aby]?\$-匹配使用的算法。有效值为2、2a,2y和2b\d{1,2}\$ -与费用或轮数匹配,为4到31(含)之间的整数[.\/A-Za-z0-9]{53} -匹配盐和哈希,盐组成前22个字符,哈希密码组成后31个字符| 归档时间: |
|
| 查看次数: |
3735 次 |
| 最近记录: |