PHP password_hash始终包含hashkey

 shaihaiyou 发布于 2023-02-06 16:11

我试图为此目的测试password_hash方法我创建了以下函数hashPassword:

function hashPassword($string) {
    $settings = array('cost' => 10, 'encryption_key' => 'thisIsMyEncryptionKey1234');
    return password_hash($string, PASSWORD_BCRYPT, $settings);
}

现在,如果我用随机字符串测试这个 "test"

结果将是:

$2y$10$thisIsMyEncryptionKeyu5n3NNnKh3DjgJqgb5pE8YOLBclKrVWC

或者如果我测试它helloworld:

$2y$10$thisIsMyEncryptionKeyuVw8QRVNw8HbEWHX2oQlArVtne2TzOpS

谁能告诉我为什么会这样?还是假设是这样的?

1 个回答
  • 除非您有充分的理由这样做,否则不应手动提供加密密钥.我建议再阅读password_hash一些文档.

    正确使用只是让系统自己解决所有问题:

    function hashPassword($password)
    {
        return password_hash($password, PASSWORD_DEFAULT);
    }
    

    然后,PHP将在内部为当前硬件选择最佳可用算法和最适合的迭代次数,并生成安全且独特的盐.

    要验证密码,请使用password_verify并检查所需的重新加密,例如在User类中:

    class User
    {
        ...
    
        public function verifyPassword($password)
        {
          if(!password_verify($password, $this->hash))
            return false;
          if(password_needs_rehash($this->hash, PASSWORD_DEFAULT))
            $this->setNewHashAndSaveToDB(password_hash($password, PASSWORD_DEFAULT));
          return true;
        }
    }
    

    通过使用此构造,您可以确保在用户登录时,随着硬件容量的进展,散列密码始终保持最新且安全.

    什么算法PASSWORD_DEFAULT选择的策略,以及使用哪个配置,如下所示:

    此函数对受支持算法的更新(或对默认算法的更改)必须遵循以下规则:

    在成为默认值之前,任何新算法必须在核心中至少有1个完整版本的PHP.因此,例如,如果在5.5.5中添加了新算法,则在5.7之前它将不符合默认条件(因为5.6将是第一个完整版本).但是如果在5.6.0中添加了不同的算法,它也有资格默认为5.7.0.

    默认值应仅在完整版本(5.6.0,6.0.0等)上更改,而不在修订版本上更改.唯一的例外是在当前默认情况下发现严重安全漏洞的紧急情况.

    2023-02-06 16:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有