【发布时间】:2014-12-02 14:12:21
【问题描述】:
根据我的理解 crypt(string, salt),取盐,将其粘贴到字符串参数的加密版本的前面。
$pw = "secret";
$format_and_salt = $2y$10$MWRmZTkwMTc5ZGJjZDI1NT;
$hash = crypt($pw, $format_and_salt);
$hash 以$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm 的形式存储到数据库列hashed_password
或分解:
第一部分是 $format_and_salt:$2y$10$MWRmZTkwMTc5ZGJjZDI1N (sans the 'T')
+
第二部分是加密的$pw:OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm
如果我随后再次使用 crypt 来验证用户提交给 $_POST 的密码是否与数据库中存储的 hashed_password 相比,这两种情况的输出似乎都没有反映我上面描述的逻辑。所以我错过了一些东西。
那么:
$existing_hash = $admin['hashed_password']($admin 是一个最终派生自查询的数组)。
和
crypt($pw, $existing_hash) 返回$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm
与上面的$hash 相同。这可以验证或使用户提交到 $_POST 无效,但如前所述,如果我遵循上面第一个 crypt() 的逻辑,我希望:
第一部分是$existing_hash:$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm
+
第二部分是加密的$pw:OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm
我希望将其组合为:
$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqmOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm
有人能解释一下为什么原来的地穴和上面用来验证第一个地穴的地穴都有相同的输出吗?提前致谢。
【问题讨论】: