JavaTM Platform
Standard Ed. 6

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);
...など
} 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 オブジェクトを返します。

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

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

パラメータ:
algorithm - 要求するアルゴリズムの名前 アルゴリズムの標準名については、「Java 暗号化アーキテクチャー API 仕様 & リファレンス」の付録 A を参照
戻り値:
指定されたアルゴリズムを実装する Message Digest オブジェクト
例外:
NoSuchAlgorithmException - 指定されたアルゴリズムの MessageDigestSpi 実装をサポートする Provider が存在しない場合
関連項目:
Provider

getInstance

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

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

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

パラメータ:
algorithm - 要求するアルゴリズムの名前 アルゴリズムの標準名については、「Java 暗号化アーキテクチャー API 仕様 & リファレンス」の付録 A を参照
provider - プロバイダ名
戻り値:
指定されたアルゴリズムを実装する MessageDigest オブジェクト
例外:
NoSuchAlgorithmException - 指定されたプロバイダに指定されたアルゴリズムの MessageDigestSpi 実装がない場合
NoSuchProviderException - 指定されたプロバイダがセキュリティープロバイダリストに登録されていない場合
IllegalArgumentException - プロバイダの名前が null か空の場合
関連項目:
Provider

getInstance

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

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

パラメータ:
algorithm - 要求するアルゴリズムの名前 アルゴリズムの標準名については、「Java 暗号化アーキテクチャー API 仕様 & リファレンス」の付録 A を参照
provider - プロバイダ
戻り値:
指定されたアルゴリズムを実装する MessageDigest オブジェクト
例外:
NoSuchAlgorithmException - 指定された Provider オブジェクトに指定されたアルゴリズムの MessageDigestSpi 実装がない場合
IllegalArgumentException - 指定されたプロバイダが 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 Platform
Standard Ed. 6

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

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