CodeIgniter3 - 密码散列不适用于所有特殊字符
CodeIgniter3 - password hashing doesn't work for all special characters
我正在尝试使用 CodeIgniter 3 库“Community Auth”散列密码,我想我发现只有某些特殊字符才有效。我只是不知道为什么,或者他们真的发生了什么。
- 这是一个有效的密码示例:KA83**8!d#
- 这是一个 NOT 有效的示例密码:1aA!@#%^&*()-_=+{};:,<.>
编辑:我应该澄清密码保存到数据库,但尝试登录是行不通的。
如果我将以下方法提取到执行 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 方法正在转义密码,但登录方法不是。已更新以逃避两者,现在可以使用了。
我正在尝试使用 CodeIgniter 3 库“Community Auth”散列密码,我想我发现只有某些特殊字符才有效。我只是不知道为什么,或者他们真的发生了什么。
- 这是一个有效的密码示例:KA83**8!d#
- 这是一个 NOT 有效的示例密码:1aA!@#%^&*()-_=+{};:,<.>
编辑:我应该澄清密码保存到数据库,但尝试登录是行不通的。
如果我将以下方法提取到执行 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 方法正在转义密码,但登录方法不是。已更新以逃避两者,现在可以使用了。