Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 已停止工作的YII2加密函数_Php_Yii2_Crypt_Yii2 Model - Fatal编程技术网

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()。不幸的是,我不得不使用它,因为用户来自一个遗留应用程序,在应用程序中,他们是这样做的。