2017-02-25 87 views
0

我在的config.php文件設置的密鑰呼叫笨加密密鑰

$config['encryption_key'] = '[email protected][email protected]!`[email protected]%^&'; 

我想註冊用戶到網站時使用的密碼,此鍵,現在我用這個方法

'password' => hash('sha256', $password . '[email protected][email protected]!`[email protected]%^&') 

有什麼辦法,我可以將上面的代碼一樣

'password' => hash('sha256', $password . $config['encryption_key']), 

當我這樣做給未定義的$配置變量的錯誤。

+2

你不應該使用簡單的散列函數來保護你的用戶密碼。你需要使用像PBKDF2,bcrypt,scrypt和Argon2這樣強大的散列方案。一定要使用高成本因子/迭代次數。選擇成本是很常見的,因此一次迭代至少需要100ms。查看更多:[如何安全哈希密碼?](http://security.stackexchange.com/q/211/45523) –

+0

只使用哈希函數是不夠的,只是添加鹽沒有提高安全性,加密哈希速度非常快。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。使用諸如「PBKDF2」(又名'Rfc2898DeriveBytes'),'password_hash' /'password_verify','Bcrypt'和類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 **保護您的用戶非常重要,請使用安全的密碼方法。** – zaph

回答

3

我強烈建議您使用內置的PHP API密碼鹽/哈希值,而不是你所使用的加密密鑰是指用於加密類的方法...

$passwordHash = password_hash($password, PASSWORD_BCRYPT); 

你使用存儲在數據庫中的這個鹽漬和散列密碼。

password_verify($password, $result->password) 

這讓你在一個if語句中使用它返回一個布爾值:

使用從DB得到,當它然後驗證

if (password_verify($password, $result->password)) { 

// do login stuff 

} else { 

// handle login failure 

} 

否則,您可以使用加密密鑰通過以下(強烈建議反對它):

$this->config->item('encryption_key'); 

如果這不起作用,你可能寫一個助手或其他東西,所以你需要調用CI實例來訪問配置數組。