【发布时间】:2013-08-08 17:54:44
【问题描述】:
我知道 PHP 函数,password_hash 在一个字符串中输出算法、成本、盐和哈希,因此password_verify 可以检查密码。
PHP page 的示例输出:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
所以 $2y$ 代表算法,10 代表成本。
但是password_verify 如何将盐与哈希分开?之后我看不到任何标识符将两者分开。
【问题讨论】:
-
盐按照指定算法打包到哈希的前X位。
-
知道了,在这个 SO 问题中找到了有关 CRYPT_BLOWFISH 的更多信息:stackoverflow.com/a/15727563/761902。 salt 是哈希的前 21 个字符。
-
很高兴知道输出的“格式”(econding),因为如果我假设 UTF8,当您在 php 和 javascript 中执行相同的哈希但不是记录在任何地方,其中一个是正确的编码。
-
@DarioOO 字符集在其中不起作用 - salt 是使用 bcrypt 特定版本的 Base64 编码的,它只使用 ASCII 字符。
标签: php passwords verify php-password-hash