bcrypt gem が v3.1.13 で bcrypt 2b に対応した

タイトルの通りですが、bcrypt gem が v3.1.13 で bcrypt 2b に対応しました。

github.com

例えば他のシステムでハッシュを生成したなどで、それが 2b の場合は検証に失敗するので、必要な方は Gem をアップデートしましょう。

2b とは何

Wikipedia によると、2b はハッシュアルゴリズムのバージョンで、2014/2 にリリースされた、2019/06 現在最新のバージョンです。

en.wikipedia.org

bcrypt gem の GitHub リポジトリでは 2018/11 ごろに対応していたのですが、Gem として v3.1.13 がリリースされたのが 2019/5 末でした。

github.com

確認してみる

例えば Python の bcrypt ライブラリ は、デフォルトで 2b のハッシュが作成されます。(v3.1.6 で確認)

>>> import bcrypt
>>> bcrypt.hashpw(b'foobar', bcrypt.gensalt())
b'$2b$12$Ib0qlHDq/BCDvu7GzIJtw.uXfK7WZGSS2cNCVbOsa5xfGOcRT7WX.'

これを bcrypt gem で検証してみると...

v3.1.13 からは true が返ります:

[1] pry(main)> BCrypt::Password.new("$2b$12$Ib0qlHDq/BCDvu7GzIJtw.uXfK7WZGSS2cNCVbOsa5xfGOcRT7WX.") == "foobar"
=> true

v3.1.12 以前は false が返ります:

[1] pry(main)> BCrypt::Password.new("$2b$12$Ib0qlHDq/BCDvu7GzIJtw.uXfK7WZGSS2cNCVbOsa5xfGOcRT7WX.") == "foobar"
=> false

(半年前にこれにハマって、対応していないので注意しましょう、という記事を書こうと思っていたら半年経っていました。)