BCrypt哈希密码突然附加了无尽的\ xoo字符流

问题描述 投票:0回答:1

最近,当我尝试使用密码保存记录时,我开始收到BCrypt“无效哈希”错误,因此我查看了BCrypt代码,发现了以下用于验证密码的方法:

  def valid_hash?(h)
    h =~ /^\$[0-9a-z]{2}\$[0-9]{2}\$[A-Za-z0-9\.\/]{53}$/
  end

我对正则表达式不是很了解,所以我不确定该表达式到底在寻找什么,但是我已经测试了许多完全不同长度的完全正常的密码,但都不满足要求。例如:

"PassiveForbearenceFox"
"VindictivePurpleAlligator12345"
"LostBlueLizard!@#$1234" 

全部返回零。

这是故意的吗?这是BCrypt之前使用的正则表达式吗?我需要更改吗?

更新:

我深入研究,发现正则表达式正在检查散列密码,但是由于某种原因而被传递的散列后面有无穷的/x00流。例如,如果我输入密码“ LostBlueLizard!@#1234”,则传递给挑战正则表达式的哈希是

"$2a$11$NcmldbbyCDfumGYALgYhfuIQt2FZ8gpbVCQfuiVlwjhCtkD2ndDFy\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\.....等等,比我能滚动的还要远。

如果我删除\xoo并仅传递“ $ 2a $ 11 $ NcmldbbyCDfumGYALgYhfuIQt2FZ8gpbVCQfuiVlwjhCtkD2ndDFy”,它将通过正则表达式。

没有人知道为什么哈希中包含这些字符吗?我无法证明以前没有密码,但是直到最近我的密码始终都被接受。

ruby-on-rails regex ruby validation bcrypt
1个回答
-1
投票

这并不意味着Bcrypt的valid_hash吗?方法错误,表示存储的密码无效或与有效哈希系统不匹配的nil。

您可能必须添加

has_secure_password

如果没有,请在此之后检查password_digest字段。

© www.soinside.com 2019 - 2024. All rights reserved.