1. ホーム
  2. マイスル

[解決済み] データベースにBcryptハッシュ化されたパスワードを格納するために使用する列の種類/長さは何ですか?

2022-04-30 05:23:35

質問

ハッシュ化したパスワード(BCryptを使用)をデータベースに保存したいのですが、どうすればよいですか?この場合、どのような型が良いでしょうか?また、正しい長さはどれでしょうか?BCryptでハッシュ化されたパスワードは常に同じ長さなのでしょうか?

EDIT

ハッシュの例

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

EDIT 2

実装に触れず申し訳ありません。私が使っているのは jBCrypt .

解決方法は?

bcryptのmodular crypt形式は以下のように構成されています。

  • $2$ , $2a$ または $2y$ を識別する ハッシュアルゴリズムとフォーマット
  • コストパラメータを示す2桁の値、その後に $
  • 53文字でBase64エンコードされた値(アルファベットの . , / , 0 - 9 , A - Z , a - z とは異なるものである。 標準的なBase 64エンコーディング アルファベット)で構成されています。
    • 22文字のソルト(132ビットのうち実質的に128ビットしか復号化されていない)
    • 31文字の暗号化出力(186ビットのうち実質184ビットのみ解読)

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

2a形式を使うので、60バイト必要です。そのため、MySQLでは CHAR(60) BINARY または BINARY(60) (参照 _bin バイナリ 照合順序 をご覧ください)。

CHAR はバイナリセーフではなく、等価性はバイト値だけでなく実際の照合順序に依存します。 A と等しいものとして扱われます。 a . 参照 _binbinary 照合順序 をご覧ください。