确保密码安全

时间:2017-04-28 15:25:27

标签: php security

我目前正在寻找加密和存储用户密码的最佳做法。 此时我正在存储一个秘密密钥'在我的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. 处理密码时,哪种散列/加密算法是最佳选择?
  3. 亲切的问候!

3 个答案:

答案 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);

您也可以阅读CRYPT_BLOWFISH is the strongest hash algorithm.

的原因

答案 2 :(得分:0)

查看password_hash()功能。它为每个密码生成动态盐。我觉得它更好,因为如果有人找到密钥,他就能解密所有密码。

此功能与password_verify($pass_entered, $pass_stored)一起使用。