bcrypt gem が v3.1.13 で bcrypt 2b に対応した
タイトルの通りですが、bcrypt gem が v3.1.13 で bcrypt 2b に対応しました。
例えば他のシステムでハッシュを生成したなどで、それが 2b の場合は検証に失敗するので、必要な方は Gem をアップデートしましょう。
2b とは何
Wikipedia によると、2b はハッシュアルゴリズムのバージョンで、2014/2 にリリースされた、2019/06 現在最新のバージョンです。
bcrypt gem の GitHub リポジトリでは 2018/11 ごろに対応していたのですが、Gem として v3.1.13 がリリースされたのが 2019/5 末でした。
確認してみる
例えば 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
(半年前にこれにハマって、対応していないので注意しましょう、という記事を書こうと思っていたら半年経っていました。)