2017-02-25 89 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实例来访问配置数组。