JavaTM 2 Platform
Standard Ed. 5.0

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, Provider provider)
          指定されたアルゴリズムがプロバイダから使用可能である場合に、指定されたプロバイダから供給されるそのアルゴリズムを実装する 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)
          指定されたバイトデータの配列を使って、指定されたオフセットから開始してダイジェストを更新します。
 void update(ByteBuffer input)
          指定された ByteBuffer を使用してダイジェストを更新します。
 
クラス java.security.MessageDigestSpi から継承されたメソッド
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, 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 - プロバイダがその環境で使用できない場合
IllegalArgumentException - プロバイダの名前が null か空の場合
関連項目:
Provider

getInstance

public static MessageDigest getInstance(String algorithm,
                                        Provider provider)
                                 throws NoSuchAlgorithmException
指定されたアルゴリズムがプロバイダから使用可能である場合に、指定されたプロバイダから供給されるそのアルゴリズムを実装する MessageDigest オブジェクトを作成します。注: provider を登録する必要はありません。

パラメータ:
algorithm - 要求されたアルゴリズムの標準的な名前。アルゴリズムの標準名については、「Java 暗号化アーキテクチャ API の仕様およびリファレンス」の付録 A を参照
provider - プロバイダ
戻り値:
指定されたアルゴリズムを実装する MessageDigest オブジェクト
例外:
NoSuchAlgorithmException - 要求されたプロバイダが提供するパッケージではアルゴリズムを使用できない場合
IllegalArgumentException - provider が null の場合
導入されたバージョン:
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()
このメッセージダイジェストオブジェクトの文字列表現を返します。

オーバーライド:
クラス Object 内の toString
戻り値:
このオブジェクトの文字列表現

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 をサポートしていない実装で呼び出された場合
関連項目:
Cloneable

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。