Cakephp 3.0 alpha2如何将新密码与旧密码进行比较?

时间:2014-08-18 02:44:02

标签: php cakephp authentication passwords

好的,所以我通过将我的应用程序(2.5)转移到3.x来测试Cakephp 3.0 alpha2。我当前的应用程序已将其设置为当您重置密码时,为了安全起见,您无法将其更改为以前的六个密码中的任何一个(存储在通过user_id连接密码表的密码表中)。当我看到Cake 3.0中的更改时,我注意到如果您创建一个新实体,即使密码相同,密码也会有不同的哈希值。将新密码与旧密码进行比较的好方法是什么?我是否会使用密码hasher内置的函数check?

1 个答案:

答案 0 :(得分:5)

CakePHP 3使用bcrypt。简而言之:bcrypt为每个密码使用不同的salt,并将salt存储为密码哈希的一部分。这就是为什么,正如您所发现的,每次加密相同的纯文本密码时,bcrypt都会生成不同的哈希值。

但是,如果要将其用作身份验证系统,则必须能够检查纯文本密码是否适合该密码的给定哈希版本 - 即使没有一个'正确' '哈希版,对吗?右。

您使用password_verify方法 - http://au2.php.net/password_verify

执行此操作

因此,不是对纯文本版本进行散列,而是查看新密码的散列版本是否与过去6个版本中每个版本的散列版本匹配,您必须在纯文本密码上调用password_verify 6次 - 每次之前的散列密码一次,以查看是否有任何匹配。

这里有一个关于bcrypt的很好的解释:How do you use bcrypt for hashing passwords in PHP?我建议你阅读 - 一旦你理解了bcrypt如何处理密码,你的问题就不应该太难解决了。