代码之家  ›  专栏  ›  技术社区  ›  harryg

使用comeonin将bcrypt密码散列从laravel应用程序迁移到elixir应用程序

  •  0
  • harryg  · 技术社区  · 7 年前

    我正在将一个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 )但是我假设库可以从散列的前缀中读取这个。

    是否可以在不让用户重置密码的情况下迁移这些散列?

    1 回复  |  直到 7 年前
        1
  •  0
  •   harryg    7 年前

    正如@nicnilov提到的,comenin不支持 2y prefix(它是为了解决php实现中的一个bug而创建的)。碰巧 小精灵 2b 仅仅替换前缀就可以验证散列。

    Example:

    Comeonin.Bcrypt.checkpw(password, fix_prefix(password_hash))
    
    defp fix_prefix("$2y" <> rest), do: "$2b" <> rest
    defp fix_prefix(password_hash), do: password_hash