我目前正在寻找加密和存储用户密码的最佳做法。 此时我正在存储一个秘密密钥'在我的JSON配置中由16个字符组成,我总是连接这个密钥和密码,以便生成一个“安全”的密码。密码。
如何才能更好地应对这种情况?它是否足够安全,每个密码都有一个密钥,或者我应该放弃这种方法,以支持好的密码'数据库密码+盐存储?
class PasswordHandler
{
private $_secret_key;
private $_password;
public function __construct($password = 'myVeryStrongPasswordThanNoneCouldBreak') {
$this->_secret_key = 'i36P8JKnyuvaNDah';
$this->_password = $password;
return $this;
}
public function processPassword() {
return hash('sha256', $this->_secret_key . $this->_password);
}
}
echo (new PasswordHandler)->processPassword();
此外:
亲切的问候!
答案 0 :(得分:4)
SHA-256足够强大吗?
今天可能没问题,但明天不会。一般使用哈希设计得很快,这就是为什么它们是密码的错误选择。您希望使用一个旨在需要大量计算工作的系统。
处理密码时,哪种哈希/加密算法是最佳选择
用于在PHP中哈希密码的唯一事件是password_hash()
及其合作伙伴函数password_verify()
。如果您使用的是5.5之前的PHP版本,则可以使用this compatibility pack。
另请注意:
$this->_secret_key = 'i36P8JKnyuvaNDah';
你的钥匙不再是秘密了。
答案 1 :(得分:0)
我会使用PHP函数password_hash和bcrypt(crypt blowfish):source
$encrypted = password_hash("plainpassword", PASSWORD_BCRYPT);
的原因
答案 2 :(得分:0)
查看password_hash()
功能。它为每个密码生成动态盐。我觉得它更好,因为如果有人找到密钥,他就能解密所有密码。
此功能与password_verify($pass_entered, $pass_stored)
一起使用。