我在数据库中有一个加密的密码,我试图检索:
型号:
function get_user($usr, $pwd)
{
$encriptKey = 'super-secret-key';
$sql = "
select * from user
where username = '" . $usr . "' and
password = '". $this->encrypt->decode($pwd,$encriptKey) . "'
";
$query = $this->db->query($sql);
return $query->num_rows();
}
在控制器中我有:
$username = $this->input->post("txt_username");
$password = $this->input->post('txt_password');
$usr_result = $this->account_model->get_user($username, $password);
if ($usr_result > 0) //active user record is present
{
//login
}
为什么密码仍无效?
答案 0 :(得分:2)
既然你问我我也提交了这个答案。
首先要注意的是,通常情况下,如果您要在数据库中存储一个秘密值,并在以后检查某些内容是否匹配,那么执行该操作的方法是存储加密并比较加密的纯值与存储的内容相同。我之所以这样说,是因为您似乎正在尝试将收到的内容解码为参数,并将其与您在表格中的内容进行比较。
此外,由于这是一个密码,通常它是一种更好,更安全的方法来散列值,而不是加密它们。您也可以这样做,以便完全相同的密码,不会以相同的方式进行两次散列,这将增加另一层安全性。
我不认为让我在PHP中复制和粘贴散列密码的好方法是个好主意,所以我只是引用一些其他问题,你可以在这个页面上找到"相关"边栏:
答案 1 :(得分:0)
试试这个
在控制器中
$username = $this->input->post("txt_username");
$password = $this->input->post('txt_password');
$usr_result = $this->account_model->get_user($username, $password);
if ($usr_result == FALSE)
{
echo "Invalid User";
}
else{
echo "Valid User";
}
在模型中
function get_user($usr, $pwd)
{
$encriptKey = 'super-secret-key';
$password = $this->encrypt->decode($pwd,$encriptKey);
$sql = "SELECT * FROM user WHERE username = '$usr' AND password = '$password' ";
$query = $this->db->query($sql);
$count = count($query);
if (empty($count) || $count > 1) {
return FALSE;
}
else{
return TRUE;
}
}