クラス BCrypt

java.lang.ObjectSE
org.springframework.security.crypto.bcrypt.BCrypt

public class BCrypt extends ObjectSE
BCrypt は、Niels Provos と David Mazieres による "A Future-Adaptable Password Scheme" で説明されているスキームを使用して、OpenBSD スタイルの Blowfish パスワードハッシュを実装しています。

このパスワードハッシュシステムは、Bruce Schneier の Blowfish 暗号に基づく、計算集約型のハッシュアルゴリズムを使用して、オフラインのパスワードクラッキングを阻止しようとします。アルゴリズムの作業係数はパラメーター化されているため、コンピューターが高速になるにつれて増加する可能性があります。

使い方は本当に簡単です。初めてパスワードをハッシュするには、次のように、ランダムなソルトを使用して hashpw メソッドを呼び出します。

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());

平文パスワードが以前にハッシュされたものと一致するかどうかを確認するには、checkpw メソッドを使用します。

if (BCrypt.checkpw(candidate_password, stored_hash))
System.out.println("It matches");
else
System.out.println("It does not match");

gensalt() メソッドは、ハッシュの計算の複雑さを決定するオプションのパラメーター(log_rounds)を取ります。

String strong_salt = BCrypt.gensalt(10)
String stronger_salt = BCrypt.gensalt(12)

作業量は指数関数的に増加するため(2 ** log_rounds)、各増分は作業量の 2 倍になります。デフォルトの log_rounds は 10 で、有効範囲は 4 〜 31 です。

  • コンストラクターのサマリー

    コンストラクター
    コンストラクター
    説明
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static boolean
    checkpw(byte[] passwordb, StringSE hashed)
    パスワード(バイト配列として)が以前にハッシュされたものと一致することを確認します
    static boolean
    checkpw(StringSE plaintext, StringSE hashed)
    平文のパスワードが以前にハッシュされたパスワードと一致することを確認します
    static StringSE
    BCrypt.hashpw() メソッドで使用するソルトを生成し、適用するハッシュラウンド数の適切なデフォルトを選択します
    static StringSE
    gensalt(int log_rounds)
    BCrypt.hashpw() メソッドで使用するソルトを生成します
    static StringSE
    gensalt(int log_rounds, SecureRandomSE random)
    BCrypt.hashpw() メソッドで使用するソルトを生成します
    static StringSE
    static StringSE
    gensalt(StringSE prefix, int log_rounds)
    BCrypt.hashpw() メソッドで使用するソルトを生成します
    static StringSE
    gensalt(StringSE prefix, int log_rounds, SecureRandomSE random)
    BCrypt.hashpw() メソッドで使用するソルトを生成します
    static StringSE
    hashpw(byte[] passwordb, StringSE salt)
    OpenBSD bcrypt スキームを使用してパスワードをハッシュする
    static StringSE
    hashpw(StringSE password, StringSE salt)
    OpenBSD bcrypt スキームを使用してパスワードをハッシュする

    クラス java.lang.ObjectSE から継承されたメソッド

    clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
  • コンストラクターの詳細

    • BCrypt

      public BCrypt()
  • メソッドの詳細

    • hashpw

      public static StringSE hashpw(StringSE password, StringSE salt)
      OpenBSD bcrypt スキームを使用してパスワードをハッシュする
      パラメーター:
      password - ハッシュするパスワード
      salt - ハッシュするソルト (おそらく BCrypt.gensalt を使用して生成)
      戻り値:
      ハッシュされたパスワード
    • hashpw

      public static StringSE hashpw(byte[] passwordb, StringSE salt)
      OpenBSD bcrypt スキームを使用してパスワードをハッシュする
      パラメーター:
      passwordb - バイト配列としてハッシュするパスワード
      salt - ハッシュするソルト (おそらく BCrypt.gensalt を使用して生成)
      戻り値:
      ハッシュされたパスワード
    • gensalt

      public static StringSE gensalt(StringSE prefix, int log_rounds, SecureRandomSE random) throws IllegalArgumentExceptionSE
      BCrypt.hashpw() メソッドで使用するソルトを生成します
      パラメーター:
      prefix - プレフィックス値 (デフォルト $2a)
      log_rounds - 適用するハッシュのラウンド数の log2 - 作業係数は 2 ** log_rounds として増加します。
      random - 使用する SecureRandom のインスタンス
      戻り値:
      エンコードされたソルト値
      例外:
      IllegalArgumentExceptionSE - プレフィックスまたは log_rounds が無効な場合
    • gensalt

      public static StringSE gensalt(StringSE prefix, int log_rounds) throws IllegalArgumentExceptionSE
      BCrypt.hashpw() メソッドで使用するソルトを生成します
      パラメーター:
      prefix - プレフィックス値 (デフォルト $2a)
      log_rounds - 適用するハッシュのラウンド数の log2 - 作業係数は 2 ** log_rounds として増加します。
      戻り値:
      エンコードされたソルト値
      例外:
      IllegalArgumentExceptionSE - プレフィックスまたは log_rounds が無効な場合
    • gensalt

      public static StringSE gensalt(int log_rounds, SecureRandomSE random) throws IllegalArgumentExceptionSE
      BCrypt.hashpw() メソッドで使用するソルトを生成します
      パラメーター:
      log_rounds - 適用するハッシュのラウンド数の log2 - 作業係数は 2 ** log_rounds として増加します。
      random - 使用する SecureRandom のインスタンス
      戻り値:
      エンコードされたソルト値
      例外:
      IllegalArgumentExceptionSE - log_rounds が無効な場合
    • gensalt

      public static StringSE gensalt(int log_rounds) throws IllegalArgumentExceptionSE
      BCrypt.hashpw() メソッドで使用するソルトを生成します
      パラメーター:
      log_rounds - 適用するハッシュのラウンド数の log2 - 作業係数は 2 ** log_rounds として増加します。
      戻り値:
      エンコードされたソルト値
      例外:
      IllegalArgumentExceptionSE - log_rounds が無効な場合
    • gensalt

      public static StringSE gensalt(StringSE prefix)
    • gensalt

      public static StringSE gensalt()
      BCrypt.hashpw() メソッドで使用するソルトを生成し、適用するハッシュラウンド数の適切なデフォルトを選択します
      戻り値:
      エンコードされたソルト値
    • checkpw

      public static boolean checkpw(StringSE plaintext, StringSE hashed)
      平文のパスワードが以前にハッシュされたパスワードと一致することを確認します
      パラメーター:
      plaintext - 確認するプレーンテキストのパスワード
      hashed - 以前にハッシュされたパスワード
      戻り値:
      パスワードが一致する場合は true、そうでない場合は false
    • checkpw

      public static boolean checkpw(byte[] passwordb, StringSE hashed)
      パスワード(バイト配列として)が以前にハッシュされたものと一致することを確認します
      パラメーター:
      passwordb - バイト配列として検証するパスワード
      hashed - 以前にハッシュされたパスワード
      戻り値:
      パスワードが一致する場合は true、そうでない場合は false
      導入:
      5.3