当我使用如下查询查询我的数据库时:
SELECT username, DES_DECRYPT(password) as password FROM accounts WHERE 1;
我会得到我的结果:
username | password
-------------------
testUser | pwtest
当我在CodeIgniters Active Record中执行相同操作时:
$this->db->select("username, DES_DECRYPT(password) as password");
return $this->db->get("accounts")->result_array();
我将得到以下数组:
[0] => Array
(
[username] => testUser
[password] =>
)
任何想法为什么这不起作用或如何使这项工作?
一些额外的信息:该功能也将完全带有插入:
$this->db->insert("accounts", array("username" => "test", "password" => "DES_ENCRYPT(wachtwoord)"));
这将插入(以纯文本格式)“DES_ENCRYPT(wachtwoord)”
PS。为了防止标准“最好使用散列而不是保存密码”讨论:我同意,但在这种情况下散列不是一种选择。
答案 0 :(得分:0)
codeigniter不是100%完成,很可能它没有使用所有的mysql函数。而不是这样写:
$this->db->select("username, DES_DECRYPT(password) as password");
这样写:
$this->db->select("username, " . decrypt(password) . " as password");
其中decrypt是DES等同于DES_DECRYPT。 PHP等效于Mcrypt更多信息在这里找到:
https://answers.yahoo.com/question/index?qid=20071201215913AAG8QKF
还要避免以可以解密的方式加密密码。不好的做法,除了用户之外,没有人应该知道他们的密码。