Php 已停止工作的YII2加密函数
我在我的网站上有一个页面,允许用户更改那里的密码,但作为表单的一部分,他们必须输入旧密码。在模型中,我进行了验证,以检查表单中输入的旧密码是否与数据库中的密码匹配Php 已停止工作的YII2加密函数,php,yii2,crypt,yii2-model,Php,Yii2,Crypt,Yii2 Model,我在我的网站上有一个页面,允许用户更改那里的密码,但作为表单的一部分,他们必须输入旧密码。在模型中,我进行了验证,以检查表单中输入的旧密码是否与数据库中的密码匹配 public function oldPasswordCheck($attribute, $params) { $old_password = $this->attributes['password']; if (crypt($this->old_password, $old
public function oldPasswordCheck($attribute, $params)
{
$old_password = $this->attributes['password'];
if (crypt($this->old_password, $old_password) != $old_password)
{
$this->addError('old_password', 'This is not the old password');
}
}
这项功能直到最近才开始使用,但由于某些原因,如果您输入了正确的旧密码,它仍然会告诉您密码不匹配
如果有任何建议,我们将不胜感激。一些可能的答案:
1) 您的salt
参数
Php crypt()函数使用两个参数:crypt(string$str[,string$salt])
。看来你是在用密码当盐,这是一个非常糟糕的做法。是这样,还是您只是混淆了salt
参数?我还建议始终将密码与php进行比较,因为crypt()容易受到攻击
2) 服务器配置中的更改
您的php配置使用什么类型的哈希来加密/解密字符串
在crypt()函数支持多种散列类型的系统上,根据给定类型是否可用,将以下常量设置为0或1:crypt\u STD\u DES、crypt\u EXT\u DES、crypt\u MD5、crypt\u BLOWFISH、crypt\u SHA256和crypt\u SHA512
。如果您最近更改了服务器配置,其中一些配置将不再可用。用phpinfo()检查它
推荐
您使用的是一个框架,Yii喜欢每个框架都有自己的类来加密和解密字符串。看一看。这将使您的生活更轻松。为什么不使用密码\u hash()?php鼓励手动使用密码_hash()。不幸的是,我不得不使用它,因为用户来自一个遗留应用程序,在应用程序中,他们是这样做的。