繁体   English   中英

确保密码安全

[英]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();

也:

  1. 哈希足够还是我应该加密密码? SHA-256是否足够坚固?
  2. 处理密码时,哪种哈希/加密算法是最佳选择?

亲切的问候!

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM