JavaTM 2 Platform
Std. Ed. v1.3

java.security
クラス MessageDigest

java.lang.Object
  |
  +--java.security.MessageDigestSpi
        |
        +--java.security.MessageDigest

public abstract class MessageDigest
extends MessageDigestSpi

この MessageDigest クラスは、MD5 または SHA などのメッセージダイジェストアルゴリズムの機能を提供します。メッセージダイジェストは、任意のサイズのデータを取り固定長のハッシュ値を出力する安全な一方向のハッシュ機能です。

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

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

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

 MessageDigest md = MessageDigest.getInstance("SHA");

 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");
 }
 

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

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

関連項目:
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()
          ダイジェストの長さをバイトで返します。
static MessageDigest getInstance(String algorithm)
          指定されたダイジェストアルゴリズムを実装する MessageDigest オブジェクトを作成します。
static MessageDigest getInstance(String algorithm, String 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)
          指定されたバイトデータの配列を使って、指定されたオフセットから開始してダイジェストを更新します。
 
クラス java.security.MessageDigestSpi から継承したメソッド
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate
 
クラス java.lang.Object から継承したメソッド
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

MessageDigest

protected MessageDigest(String algorithm)
指定されたアルゴリズム名を使用してメッセージダイジェストを作成します。
パラメータ:
algorithm - ダイジェストアルゴリズムの標準名。アルゴリズムの標準名については、「Java 暗号化アーキテクチャ API 仕様 & リファレンス」の付録 A を参照
メソッドの詳細

getInstance

public static MessageDigest getInstance(String algorithm)
                                 throws NoSuchAlgorithmException
指定されたダイジェストアルゴリズムを実装する MessageDigest オブジェクトを作成します。デフォルトのプロバイダのパッケージが、要求されたダイジェストアルゴリズムの実装を提供している場合は、その実装を持った MessageDigest クラスのインスタンスが返されます。アルゴリズムがデフォルトのパッケージで得られない場合は、ほかのパッケージが検索されます。
パラメータ:
algorithm - 要求されたアルゴリズムの標準的な名前。アルゴリズムの標準名については、「Java 暗号化アーキテクチャ API 仕様 & リファレンス」の付録 A を参照
戻り値:
指定されたアルゴリズムを実装する MessageDigest オブジェクト
例外:
NoSuchAlgorithmException - アルゴリズムが呼び出し側の環境で使用可能でない場合

getInstance

public static MessageDigest getInstance(String algorithm,
                                        String provider)
                                 throws NoSuchAlgorithmException,
                                        NoSuchProviderException
指定されたアルゴリズムがプロバイダから使用可能である場合に、指定されたプロバイダから供給されるそのアルゴリズムを実装する MessageDigest オブジェクトを作成します。
パラメータ:
algorithm - 要求されたアルゴリズムの標準的な名前。アルゴリズムの標準名については、「Java 暗号化アーキテクチャ API 仕様 & リファレンス」の付録 A を参照
provider - プロバイダ名
戻り値:
指定されたアルゴリズムを実装する MessageDigest オブジェクト
例外:
NoSuchAlgorithmException - 要求されたプロバイダが提供するパッケージではアルゴリズムを使用できない場合
NoSuchProviderException - プロバイダがその環境で使用できない場合
関連項目:
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 - バイトの配列

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()
このメッセージダイジェストオブジェクトの文字列表現を返します。
オーバーライド:
クラス Object 内の toString
クラス java.lang.Object からコピーされたタグ:
戻り値:
このオブジェクトの文字列表現

isEqual

public static boolean isEqual(byte[] digesta,
                              byte[] digestb)
2 つのダイジェストが等しいかどうかを比較します。単純な 1 バイト比較を実行します。
パラメータ:
digesta - 比較する一方のダイジェスト
digestb - 比較する他方のダイジェスト
戻り値:
ダイジェストが等しい場合は true、そうでない場合は false

reset

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

getAlgorithm

public final String getAlgorithm()
実装の詳細に依存しないアルゴリズムを識別する文字列を返します。名前は、標準的な「SHA」、「MD5」などの Java セキュリティ名にする必要があります。アルゴリズムの標準名については、「Java 暗号化アーキテクチャ API 仕様 & リファレンス」の付録 A を参照してください。
戻り値:
アルゴリズムの名前

getDigestLength

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

clone

public Object clone()
             throws CloneNotSupportedException
実装が複製可能な場合は複製を返します。
オーバーライド:
クラス MessageDigestSpi 内の clone
戻り値:
実装が複製可能な場合は複製
例外:
CloneNotSupportedException - これが Cloneable をサポートしていない実装で呼び出された場合

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.