Bcryptハッシュパスワードをデータベースに保存するには、どのような列タイプ/長さを使用すればよいですか? 質問する

Bcryptハッシュパスワードをデータベースに保存するには、どのような列タイプ/長さを使用すればよいですか? 質問する

ハッシュされたパスワード (BCrypt を使用) をデータベースに保存したいです。この場合に適したタイプと正しい長さはどれでしょうか? BCrypt でハッシュされたパスワードは常に同じ長さですか?

編集

ハッシュの例:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

いくつかのパスワードをハッシュした後、BCrypt は常に 60 文字のハッシュを生成するようです。

編集2

実装については触れずに申し訳ありません。私はjBCrypt

ベストアンサー1

bcryptのモジュラー暗号フォーマットは、

  • $2$$2a$または$2y$ハッシュアルゴリズムとフォーマット
  • コストパラメータを表す2桁の数値、それに続く$
  • 53文字のbase64エンコードされた値(アルファベットの.、、- 、- 、-が使用され、/09AZaz標準Base64エンコーディングアルファベット順) :
    • 22 文字のソルト (実際には 132 ビットのデコードのうち 128 ビットのみ)
    • 暗号化された出力の 31 文字 (実際には 186 ビットのデコードのうち 184 ビットのみ)

したがって、合計の長さはそれぞれ 59 バイトまたは 60 バイトになります。

2a形式を使用する場合、60バイトが必要になります。そのため、MySQLでは、CHAR(60) BINARYまたはBINARY(60)(見る_binとバイナリ照合違いについてはこちらをご覧ください。

CHARはバイナリセーフではなく、等価性はバイト値のみではなく実際の照合順序に依存します。最悪の場合、Aは と等しいとみなされますaおよび照合_bin順序binary詳細については。

おすすめ記事