[英]Making a password secure
我目前正在寻找加密和存储用户密码的最佳实践。 目前,我在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();
也:
亲切的问候!
SHA-256是否足够坚固?
今天可能还可以,但明天就不会。 通用散列的设计速度很快,这就是为什么它们是错误的密码选择的原因。 您想使用设计成需要大量计算工作的系统。
处理密码时,哪种哈希/加密算法是最佳选择
在PHP中用于散列密码的唯一方法是password_hash()
及其合作伙伴函数password_verify()
。 如果您使用的是5.5之前的PHP版本,则可以使用此兼容性包 。
另请注意:
$this->_secret_key = 'i36P8JKnyuvaNDah';
您的钥匙不再是秘密了。
我将PHP函数password_hash与bcrypt(加密河豚)一起使用: 源
$encrypted = password_hash("plainpassword", PASSWORD_BCRYPT);
您还可以了解为什么CRYPT_BLOWFISH是最强大的哈希算法。
查看password_hash()
函数。 它为每个密码生成一个动态盐。 我认为这样比较好,因为如果有人找到了密钥,他就能解密所有密码。
此功能与password_verify($pass_entered, $pass_stored)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.