【发布时间】:2012-11-27 11:56:23
【问题描述】:
我了解 PHP 的 crypt() 函数是这样工作的:
crypt($password,$salt);
创建 bcrypt 哈希(被认为非常安全)的格式是:
crypt("$2y$15$password",$salt);
其中$2y指定使用bcrypt,15为轮数,应在10以上。
这是我的问题。运行:
crypt("$2y$15$password");
在我的理解中,生成一个不错的大随机盐并将其添加到哈希中,当比较密码时,它会自动提取。这意味着我不必在我的表中有一个盐字段,或者独立生成一个盐。这安全且正确吗?
例如,当我运行时:
$test = "Hello";
echo crypt("$2y$15$test") . "\n";
我明白了:
$6$R59d/nemygl0$/Gk6s57K2eFAkH4BWDGYhfdhbYGcqz.GRbD7qGDKOlhE5Lk.kgCoGQo/sDCCf1VDffdh7jtXPn/9rsexwrpFk1
其中前 6 位指代某个算法编号,两个 $ 之间的下一位是盐,之后的位是哈希。这是正确的吗?
另外,将此哈希与另一个哈希进行比较以进行验证的语法是什么? 谢谢。
【问题讨论】:
标签: php hash passwords cryptography bcrypt