我正在将一个laravel 5应用程序重新移植到elixir phoenix中,并希望评估使用密码迁移用户帐户的可行性。laravel应用程序使用默认的bcrypt密码散列,示例散列如下:
Hash::make("secret");
> $2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2
我用的是
Comeonin
Phoenix应用程序的库,生成如下哈希:
iex(2)> Comeonin.Bcrypt.hashpwsalt("secret")
"$2b$12$yecF6WXv0hIlyTxe5bLz..ghASJRFafObDrPUVEj3UarDflvfflq6"
当我尝试使用comeonin检查laravel生成的散列时失败:
iex(2)> Comeonin.Bcrypt.checkpw("secret","$2y$10$gLbeMfXDRnQc9VHxuVAhke3yd4L69LQBeTqBOjw6TqQNca1nrW5E2")
false
这是为什么?bcrypt有不同的实现方式吗?我可以看到这两个散列使用不同的轮数和变量(
2b
VS
2y
)但是我假设库可以从散列的前缀中读取这个。
是否可以在不让用户重置密码的情况下迁移这些散列?