Bcrypt ハッシュは列に格納できBINARY(40)ます。
BINARY(60)、他の回答が示唆するように、最も簡単で最も自然な選択ですが、ストレージ効率を最大化したい場合は、ハッシュを無損失で分解することで 20 バイトを節約できます。これについては、GitHub で詳しく説明しています: https://github.com/ademarre/binary-mcf
Bcrypt ハッシュは、モジュラー クリプト フォーマット (MCF) と呼ばれる構造に従います。バイナリMCF (BMCF) は、これらのテキスト ハッシュ表現をよりコンパクトなバイナリ構造にデコードします。Bcrypt の場合、結果のバイナリ ハッシュは 40 バイトです。
Gumbo は、Bcrypt MCF ハッシュの 4 つのコンポーネントをうまく説明してくれました。
$<id>$<cost>$<salt><digest>
BMCF へのデコードは次のようになります。
$<id>$3ビットで表現できます。
<cost>$、04-31 は 5 ビットで表すことができます。これらを合わせて 1 バイトにします。
- 22 文字のソルトは、128 ビットの (非標準) base-64 表現です。Base-64 デコードでは 16 バイトになります。
- 31 文字のハッシュ ダイジェストは、base-64 で 23 バイトにデコードできます。
- すべてを 40 バイトにまとめます。
1 + 16 + 23
上記のリンクで詳細を読むか、GitHub で私の PHP 実装を調べることができます。