首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找bcrypt散列的正则表达式?

查找bcrypt散列的正则表达式?
EN

Stack Overflow用户
提问于 2015-07-14 21:06:18
回答 4查看 7.6K关注 0票数 18

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

尝试过这个正则表达式:

代码语言:javascript
复制
{?A-Za-z_0-9.{60}}?

但没有找到匹配的人。Bcrypt散列长度为60个字符,以"$2y$“开头。

示例:

代码语言:javascript
复制
$2y$15$nK/B6u765645/lo0867h56546v/BnH5U5g45Aj67u67nMVtrhryt6
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-14 21:08:24

更新

因为在y值旁边可能有ab,所以您可以使用

代码语言:javascript
复制
^\$2[ayb]\$.{56}$

regex在线演示详细信息

  • ^ -字符串的开始
  • \$ -一个文本$字符(它应该在regex模式中转义以匹配文本$字符,否则,它将表示字符串的结尾)
  • 2 -a 2 char
  • [ayb] -与指定集合中的任意一个字符匹配的字符类
  • \$ -a $ char
  • .{56} -除换行字符之外的任何56个字符(如果不使用符合POSIX的正则表达式引擎,它将匹配任何字符;若要匹配普通NFA引擎中的任何字符,请用[\s\S]替换.或使用相应的DOTALL标志)
  • $ -字符串的末端。

原始答案

regex -- {?A-Za-z_0-9.{60}}? --不是在字符类[...]中,而是在可选的大括号中,因此它们显示了文字字符的序列。看你的regex演示看我的意思。

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

代码语言:javascript
复制
^\$2y\$.{56}$

请参阅演示

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

票数 14
EN

Stack Overflow用户

发布于 2015-08-24 19:23:25

作为上面@stribizhev回答的一个补充。在野外你可能遇到的bcrypt哈希有几个品种,所以你可能需要修改regex来捕获它们。这些变化如下:

散列的“算法标识符”部分可以包括:

  • "2" -- BCrypt的第一个版本,它有一个小的安全漏洞,通常不再使用。
  • "2a" --一些实现遇到了一个非常罕见的安全缺陷。
  • "2y" -特定于crypt_blowfish BCrypt实现的格式,除名称外,与"2a“完全相同。
  • "2b" -官方BCrypt算法的最新修订
代码语言:javascript
复制
^\$2[ayb]\$.{56}$

好像对我有用

有关bcrypt哈希:有人能解释BCrypt是如何验证哈希的吗?的分解,请参见此处

票数 25
EN

Stack Overflow用户

发布于 2018-03-08 23:44:55

用这个:

代码语言:javascript
复制
^\$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和hash,其中salt构成前22个字符,散列密码构成最后31个字符。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31417387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档