如何使用 PHP 验证 htpasswd 生成的 bcrypt 哈希值?

htpasswd我必须使用 PHP (v7.4.3)验证 apache 工具 (v2.4.41) 创建的 bcrypt-hashes password_verify。


但是如果我生成一个哈希值:


$ htpasswd -nbB test pass

test:$2y$05$m73wHlBS62EUh7uAxbUCJ.gHIfcEgiorl/1LrzNRAlSSH4bmrBUEy

...然后尝试在 PHP 中验证它...


cat << EOF | php -a

if (password_verify('pass', '$2y$05$m73wHlBS62EUh7uAxbUCJ.gHIfcEgiorl/1LrzNRAlSSH4bmrBUEy')) {

  echo 'match';

} else {

  echo 'mismatch';

}

EOF

...mismatch被打印。然而 PHP 可以验证它自己的 bcrypt 哈希值......


cat << EOF | php -a

if (password_verify('test', password_hash('test', PASSWORD_BCRYPT))) {

  echo 'match';

} else {

  echo 'mismatch';

}

EOF

...这个打印match。如何验证password_verify外部生成的 bcrypt 哈希值?


HUH函数
浏览 65回答 1
1回答

隔江千里

问题是,在我的实际代码中,由于对文件中的哈希值的解析不正确,哈希末尾存在额外的空格.htpasswd。OP中的“简化”示例引入了另一个不同的问题(由于在命令行上的散列中转义了特殊字符)并因此失败。
打开App,查看更多内容
随时随地看视频慕课网APP