暇人じゃない

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

タイトルの通りですが、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

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

About

chocoby (GitHub / Twitter)

フリーのソフトウェア開発者です。 Ruby を使った Web 開発を得意としています。