CodeIgniter3 - 密码散列不适用于所有特殊字符

CodeIgniter3 - password hashing doesn't work for all special characters

我正在尝试使用 CodeIgniter 3 库“Community Auth”散列密码,我想我发现只有某些特殊字符才有效。我只是不知道为什么,或者他们真的发生了什么。

编辑:我应该澄清密码保存到数据库,但尝试登录是行不通的。

如果我将以下方法提取到执行 hash_passwd 和 password_verify 的单个函数中,那么比较对两个密码都有效。

我应该在字符串上使用 preg_quote 以便它正确保存到数据库吗?我试过了,好像没什么影响。

这是我用来更改密码的两种方法,然后是第三种检查登录的方法。

型号=application\models\User_model.php
方法 = change_password

$this->db->where('user_id', $user_data->user_id)
                    ->update(
                            $this->db_table('user_table'), [
                        'passwd' => $this->authentication->hash_passwd($password),
                        'passwd_recovery_code' => NULL,
                        'passwd_recovery_date' => NULL
                            ]
            );

型号=application\third_party\community_auth\libraries\Authentication.php
方法 = hash_passwd

public function hash_passwd($password) {
    return password_hash($password, PASSWORD_BCRYPT, ['cost' => 11]);
}

型号=application\third_party\community_auth\libraries\Authentication.php
方法 = check_passwd

    public function check_passwd($hash, $password) {
    if (password_verify($password, $hash)) {
        return TRUE;
    }
    return FALSE;
}

我想通了。 change_password 方法正在转义密码,但登录方法不是。已更新以逃避两者,现在可以使用了。