ハッシュされたパスワード (BCrypt を使用) をデータベースに保存したいです。この場合に適したタイプと正しい長さはどれでしょうか? BCrypt でハッシュされたパスワードは常に同じ長さですか?
編集
ハッシュの例:
$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu
いくつかのパスワードをハッシュした後、BCrypt は常に 60 文字のハッシュを生成するようです。
編集2
実装については触れずに申し訳ありません。私はjBCrypt。
ベストアンサー1
bcryptのモジュラー暗号フォーマットは、
$2$
、$2a$
または$2y$
ハッシュアルゴリズムとフォーマット- コストパラメータを表す2桁の数値、それに続く
$
- 53文字のbase64エンコードされた値(アルファベットの
.
、、- 、- 、-が使用され、/
0
9
A
Z
a
z
標準Base64エンコーディングアルファベット順) :- 22 文字のソルト (実際には 132 ビットのデコードのうち 128 ビットのみ)
- 暗号化された出力の 31 文字 (実際には 186 ビットのデコードのうち 184 ビットのみ)
したがって、合計の長さはそれぞれ 59 バイトまたは 60 バイトになります。
2a形式を使用する場合、60バイトが必要になります。そのため、MySQLでは、CHAR(60) BINARY
またはBINARY(60)
(見る_binとバイナリ照合違いについてはこちらをご覧ください。
CHAR
はバイナリセーフではなく、等価性はバイト値のみではなく実際の照合順序に依存します。最悪の場合、A
は と等しいとみなされますa
。および照合_bin
順序binary
詳細については。