簡體   English   中英

如何使用 PHP 驗證 htpasswd 生成的 bcrypt hash?

[英]How to verify a htpasswd-generated bcrypt hash using PHP?

我必須使用 PHP 的password_verify (v7.4.3) 驗證 apache 的htpasswd工具 (v2.4.41) 創建的 bcrypt-hashes。

但如果我生成一個 hash:

$ 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 hash?

問題是,在我的實際代碼中,由於對.htpasswd文件中的 hash 值的解析不正確,hash 末尾有額外的空格。

OP 中的“簡化”示例引入了另一個不同的問題(由於命令行上 hash 中的 escaping 特殊字符)並因此失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM