モジュール java.base
パッケージ java.security

クラスMessageDigest


  • public abstract class MessageDigest
    extends MessageDigestSpi
    このMessageDigestクラスは、SHA-1やSHA-256などのメッセージ・ダイジェスト・アルゴリズムの機能を提供します。 メッセージ・ダイジェストは、任意サイズのデータを取得して固定長のハッシュ値を出力する安全な一方向のハッシュ機能です。

    MessageDigestオブジェクトは、初期化されて起動されます。 データは、それを介してupdateメソッドを使用して処理されます。 resetメソッドを呼び出すことにより、任意の時点でダイジェストをリセットできます。 更新対象のデータがすべて更新された時点で、digestメソッドの1つを呼び出すことにより、ハッシュ計算を終了する必要があります。

    digestメソッドは、指定回数の更新に対して1回呼び出すだけで済みます。 digestメソッドの呼出しが終了したあと、MessageDigestオブジェクトは初期化状態にリセットされます。

    Cloneableインタフェースは、自由に実装できます。 クライアント・アプリケーションは、複製の生成を試行してCloneNotSupportedExceptionをキャッチすれば、複製の生成が可能かどうかを調べることができます。

    
     MessageDigest md = MessageDigest.getInstance("SHA-256");
    
     try {
         md.update(toChapter1);
         MessageDigest tc1 = md.clone();
         byte[] toChapter1Digest = tc1.digest();
         md.update(toChapter2);
         ...etc.
     } catch (CloneNotSupportedException cnse) {
         throw new DigestException("couldn't make digest of partial content");
     }
     

    使用する実装例が複製可能でない場合でも、ダイジェストの数が前もってわかっているときには、いくつかのインスタンスを生成することによって、中間的なダイジェストを計算できます。

    このクラスは、歴史的な事情からMessageDigestSpiクラスから拡張された抽象クラスになっていることに注意してください。 アプリケーションの開発者は、MessageDigestクラスで定義されたメソッドだけに配慮してください。スーパー・クラスのすべてのメソッドは、メッセージ・ダイジェスト・アルゴリズムの独自の実装を提供する必要がある暗号サービス・プロバイダで使用されることを想定しています。

    Javaプラットフォームの実装は、すべて次の標準のMessageDigestアルゴリズムをサポートする必要があります。

    • MD5
    • SHA-1
    • SHA-256
    これらのアルゴリズムは、Javaセキュリティ標準アルゴリズム名仕様の「MessageDigestセクション」に記述されています。 サポートされているその他のアルゴリズムについては、実装のリリース・ドキュメントを参照してください。

    導入されたバージョン:
    1.1
    関連項目:
    DigestInputStream, DigestOutputStream
    • コンストラクタのサマリー

      コンストラクタ 
      修飾子 コンストラクタ 説明
      protected MessageDigest​(String algorithm)
      指定されたアルゴリズム名を使用してメッセージ・ダイジェストを作成します。
    • メソッドのサマリー

      すべてのメソッド 静的メソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      Object clone()
      実装が複製可能な場合は複製を返します。
      byte[] digest()
      パディングなどの最終処理を行ってハッシュ計算を完了します。
      byte[] digest​(byte[] input)
      指定されたバイト配列を使用してダイジェストに対して最終の更新を実行したあと、ダイジェスト計算を完了します。
      int digest​(byte[] buf, int offset, int len)
      パディングなどの最終処理を行ってハッシュ計算を完了します。
      String getAlgorithm()
      実装の詳細に依存しないアルゴリズムを識別する文字列を返します。
      int getDigestLength()
      ダイジェストの長さをバイトで返します。この処理がプロバイダによってサポートされておらず、かつ実装が複製可能ではない場合は0を返します。
      static MessageDigest getInstance​(String algorithm)
      指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。
      static MessageDigest getInstance​(String algorithm, String provider)
      指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。
      static MessageDigest getInstance​(String algorithm, Provider provider)
      指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。
      Provider getProvider()
      このメッセージ・ダイジェスト・オブジェクトのプロバイダを返します。
      static boolean isEqual​(byte[] digesta, byte[] digestb)
      2つのダイジェストが等しいかどうかを比較します。
      void reset()
      再利用のためにダイジェストをリセットします。
      String toString()
      このメッセージ・ダイジェスト・オブジェクトの文字列表現を返します。
      void update​(byte input)
      指定されたバイト・データを使ってダイジェストを更新します。
      void update​(byte[] input)
      指定されたバイト配列を使用してダイジェストを更新します。
      void update​(byte[] input, int offset, int len)
      指定されたバイト・データの配列を使って、指定されたオフセットから開始してダイジェストを更新します。
      void update​(ByteBuffer input)
      指定されたByteBufferを使用してダイジェストを更新します。
    • コンストラクタの詳細

      • MessageDigest

        protected MessageDigest​(String algorithm)
        指定されたアルゴリズム名を使用してメッセージ・ダイジェストを作成します。
        パラメータ:
        algorithm - ダイジェスト・アルゴリズムの標準名。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。
    • メソッドの詳細

      • getInstance

        public static MessageDigest getInstance​(String algorithm)
                                         throws NoSuchAlgorithmException
        指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。

        このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のProviderのMessageDigestSpi実装をカプセル化する新しいMessageDigestオブジェクトが返されます。

        登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。

        実装上のノート:
        JDKリファレンス実装では、jdk.security.provider.preferred Securityプロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()によって返されるプロバイダの順序とは異なる場合があります。
        パラメータ:
        algorithm - 要求するアルゴリズムの名前。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。
        戻り値:
        指定されたアルゴリズムを実装するMessageDigestオブジェクト
        例外:
        NoSuchAlgorithmException - Providerが、指定されたアルゴリズムのMessageDigestSpi実装をサポートしていない場合
        NullPointerException - algorithmnullである場合
        関連項目:
        Provider
      • getInstance

        public static MessageDigest getInstance​(String algorithm,
                                                String provider)
                                         throws NoSuchAlgorithmException,
                                                NoSuchProviderException
        指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。

        指定されたプロバイダのMessageDigestSpi実装をカプセル化する新しいMessageDigestオブジェクトが返されます。 指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。

        登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。

        パラメータ:
        algorithm - 要求するアルゴリズムの名前。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。
        provider - プロバイダ名。
        戻り値:
        指定されたアルゴリズムを実装するMessageDigestオブジェクト
        例外:
        IllegalArgumentException - プロバイダ名がnullまたは空の場合
        NoSuchAlgorithmException - 指定されたアルゴリズムのMessageDigestSpi実装が、指定されたプロバイダから利用可能でない場合
        NoSuchProviderException - 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合
        NullPointerException - algorithmnullである場合
        関連項目:
        Provider
      • getInstance

        public static MessageDigest getInstance​(String algorithm,
                                                Provider provider)
                                         throws NoSuchAlgorithmException
        指定されたダイジェスト・アルゴリズムを実装するMessageDigestオブジェクトを返します。

        指定されたProviderオブジェクトのMessageDigestSpi実装をカプセル化する新しいMessageDigestオブジェクトが返されます。 指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。

        パラメータ:
        algorithm - 要求するアルゴリズムの名前。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。
        provider - プロバイダ
        戻り値:
        指定されたアルゴリズムを実装するMessageDigestオブジェクト
        例外:
        IllegalArgumentException - 指定されたプロバイダがnullの場合
        NoSuchAlgorithmException - 指定されたアルゴリズムのMessageDigestSpi実装が、指定されたProviderオブジェクトから使用できない場合
        NullPointerException - algorithmnullである場合
        導入されたバージョン:
        1.4
        関連項目:
        Provider
      • getProvider

        public final Provider getProvider()
        このメッセージ・ダイジェスト・オブジェクトのプロバイダを返します。
        戻り値:
        このメッセージ・ダイジェスト・オブジェクトのプロバイダ
      • update

        public void update​(byte input)
        指定されたバイト・データを使ってダイジェストを更新します。
        パラメータ:
        input - ダイジェストを更新するバイト。
      • update

        public void update​(byte[] input,
                           int offset,
                           int len)
        指定されたバイト・データの配列を使って、指定されたオフセットから開始してダイジェストを更新します。
        パラメータ:
        input - バイトの配列。
        offset - バイトの配列での開始オフセット。
        len - 使用するバイト数(offsetから開始)。
      • update

        public void update​(byte[] input)
        指定されたバイト配列を使用してダイジェストを更新します。
        パラメータ:
        input - バイトの配列。
      • update

        public final void update​(ByteBuffer input)
        指定されたByteBufferを使用してダイジェストを更新します。 ダイジェストの更新時には、input.position()位置から始まるinput.remaining()バイトが使用されます。 終了時に、バッファの位置はリミットに等しくなりますが、リミットは変更されません。
        パラメータ:
        input - ByteBuffer
        導入されたバージョン:
        1.5
      • digest

        public byte[] digest()
        パディングなどの最終処理を行ってハッシュ計算を完了します。 この呼出しのあと、ダイジェストはリセットされます。
        戻り値:
        結果として得られるハッシュ値に対するバイト・データの配列。
      • digest

        public int digest​(byte[] buf,
                          int offset,
                          int len)
                   throws DigestException
        パディングなどの最終処理を行ってハッシュ計算を完了します。 この呼出しのあと、ダイジェストはリセットされます。
        パラメータ:
        buf - 計算済みのダイジェストの出力先バッファ
        offset - 出力バッファにダイジェストの格納を開始する位置を示すオフセット
        len - ダイジェストを割り当てるバッファのバイト数
        戻り値:
        bufに格納されたバイト数
        例外:
        DigestException - エラーが発生した場合。
      • digest

        public byte[] digest​(byte[] input)
        指定されたバイト配列を使用してダイジェストに対して最終の更新を実行したあと、ダイジェスト計算を完了します。 すなわち、このメソッドは最初にupdate(input)メソッドを呼び出してinput配列をupdateメソッドに渡したあと、digest()メソッドを呼び出します。
        パラメータ:
        input - ダイジェストの完了前に更新する対象の入力。
        戻り値:
        結果として得られるハッシュ値に対するバイト・データの配列。
      • toString

        public String toString()
        このメッセージ・ダイジェスト・オブジェクトの文字列表現を返します。
        オーバーライド:
        toString、クラスObject
        戻り値:
        このオブジェクトの文字列表現
      • isEqual

        public static boolean isEqual​(byte[] digesta,
                                      byte[] digestb)
        2つのダイジェストが等しいかどうかを比較します。 同じ長さで、対応する位置のすべてのバイトが等しい場合、2つのダイジェストは等しくなります。
        実装上のノート:
        digestaのすべてのバイトが検査され、等価かどうかが判断されます。 計算時間は、digestaの長さにのみ依存します。 digestbの長さや、digestaおよびdigestbの内容には依存しません。
        パラメータ:
        digesta - 比較する一方のダイジェスト。
        digestb - 比較する他方のダイジェスト。
        戻り値:
        ダイジェストが等しい場合はtrue、そうでない場合はfalse。
      • reset

        public void reset()
        再利用のためにダイジェストをリセットします。
      • getAlgorithm

        public final String getAlgorithm()
        実装の詳細に依存しないアルゴリズムを識別する文字列を返します。 この名前は、標準Javaセキュリティ名("SHA-256")でなければなりません。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。
        戻り値:
        アルゴリズムの名前
      • getDigestLength

        public final int getDigestLength()
        ダイジェストの長さをバイトで返します。この処理がプロバイダによってサポートされておらず、かつ実装が複製可能ではない場合は0を返します。
        戻り値:
        バイト単位のダイジェスト長。この処理がプロバイダによってサポートされておらず、かつ実装が複製可能ではない場合は0
        導入されたバージョン:
        1.2