【发布时间】:2018-08-07 21:20:30
【问题描述】:
我正在将 Laravel 5 应用程序重新平台化为 Elixir Phoenix,并希望评估使用密码迁移用户帐户的可行性。 laravel 应用使用默认的 Bcrypt 密码散列,示例散列如下所示:
Hash::make("secret");
> $2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2
我正在为 Phoenix 应用程序使用 Comeonin 库,它会生成如下所示的哈希:
iex(2)> Comeonin.Bcrypt.hashpwsalt("secret")
"$2b$12$yecF6WXv0hIlyTxe5bLz..ghASJRFafObDrPUVEj3UarDflvfflq6"
当我尝试检查 Laravel 使用 Comeonin 生成的哈希时,它失败了:
iex(2)> Comeonin.Bcrypt.checkpw("secret","$2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2")
false
这是为什么? Bcrypt 有不同的实现吗?我可以看到 2 个哈希使用不同的轮数和变体(2b 与 2y),但我认为库可以从哈希中的前缀中读取它。
是否可以在不让用户重置密码的情况下迁移这些哈希?
【问题讨论】:
-
请参阅 Comeonin Bcrypt does not support the 2y prefix? 了解(直接不受支持的)
2y格式解决方法。 -
bcrypt 是否将其发行者存储在密钥中?因为 jwt 会,然后它永远不会匹配
标签: laravel hash elixir phoenix-framework bcrypt