2014-03-30 33 views
0

當我查詢我的數據庫有這樣的查詢:DES_ENCRYPT使用CodeIgniter的ActiveRecord

SELECT username, DES_DECRYPT(password) as password FROM accounts WHERE 1; 

我會得到我的結果,如:

username | password 
------------------- 
testUser | pwtest 

當我做同樣的CodeIgniters活動記錄這樣:

$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

codeigniter不是100%完整的,有可能是它沒有使用所有的mysql函數。而不是寫這樣的:

$this->db->select("username, DES_DECRYPT(password) as password"); 

寫這樣的:

$this->db->select("username, " . decrypt(password) . " as password"); 

其中解密是php相當於DES_DECRYPT的。在PHP相當於是這個Mcrypt這裏找到更多的信息:

https://answers.yahoo.com/question/index?qid=20071201215913AAG8QKF

也避免這樣它可以被解密的加密密碼。它的壞習慣沒有人,但用戶應該知道他們的密碼。

+0

感謝您的回答。 在某些情況下,應用程序必須知道憑據(例如能夠與其他服務連接)。 – f4der