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
アルゴリズムをサポートする必要があります。
SHA-1
SHA-256
- 導入されたバージョン:
- 1.1
- 関連項目:
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明clone()
実装が複製可能な場合は複製を返します。byte[]
digest()
パディングなどの最終処理を行ってハッシュ計算を完了します。byte[]
digest
(byte[] input) 指定されたバイト配列を使用してダイジェストに対して最終の更新を実行したあと、ダイジェスト計算を完了します。int
digest
(byte[] buf, int offset, int len) パディングなどの最終処理を行ってハッシュ計算を完了します。final String
実装の詳細に依存しないアルゴリズムを識別する文字列を返します。final int
ダイジェストの長さをバイトで返します。この処理がプロバイダによってサポートされておらず、かつ実装が複製可能ではない場合は0を返します。static MessageDigest
getInstance
(String algorithm) 指定されたダイジェスト・アルゴリズムを実装するMessageDigest
オブジェクトを返します。static MessageDigest
getInstance
(String algorithm, String provider) 指定されたダイジェスト・アルゴリズムを実装するMessageDigest
オブジェクトを返します。static MessageDigest
getInstance
(String algorithm, Provider provider) 指定されたダイジェスト・アルゴリズムを実装するMessageDigest
オブジェクトを返します。final Provider
このメッセージ・ダイジェスト・オブジェクトのプロバイダを返します。static boolean
isEqual
(byte[] digesta, byte[] digestb) 2つのダイジェストが等しいかどうかを比較します。void
reset()
再利用のためにダイジェストをリセットします。toString()
このメッセージ・ダイジェスト・オブジェクトの文字列表現を返します。void
update
(byte input) 指定されたバイト・データを使ってダイジェストを更新します。void
update
(byte[] input) 指定されたバイト配列を使用してダイジェストを更新します。void
update
(byte[] input, int offset, int len) 指定されたバイト・データの配列を使って、指定されたオフセットから開始してダイジェストを更新します。final void
update
(ByteBuffer input) 指定されたByteBufferを使用してダイジェストを更新します。クラスjava.security.MessageDigestSpiで宣言されたメソッド
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate
-
コンストラクタの詳細
-
MessageDigest
protected MessageDigest(String algorithm) 指定されたアルゴリズム名を使用してメッセージ・ダイジェストを作成します。- パラメータ:
algorithm
- ダイジェスト・アルゴリズムの標準名。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のMessageDigestの項を参照してください。
-
-
メソッドの詳細
-
getInstance
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException 指定されたダイジェスト・アルゴリズムを実装するMessageDigest
オブジェクトを返します。このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。 指定されたアルゴリズムをサポートする最初のプロバイダから
MessageDigestSpi
実装をカプセル化する新しいMessageDigest
オブジェクトが返されます。登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、さらに
jdk.security.provider.preferred
Security
プロパティを使用して、指定したアルゴリズムの優先プロバイダ順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- 要求するアルゴリズムの名前。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のMessageDigestの項を参照してください。- 戻り値:
- 指定されたアルゴリズムを実装する
MessageDigest
オブジェクト - 例外:
NoSuchAlgorithmException
-Provider
が、指定されたアルゴリズムのMessageDigestSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
-
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
-algorithm
がnull
である場合- 関連項目:
-
getInstance
public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 指定されたダイジェスト・アルゴリズムを実装するMessageDigest
オブジェクトを返します。指定したプロバイダから
MessageDigestSpi
実装をカプセル化する新しいMessageDigest
オブジェクトが返されます。 指定されたプロバイダをプロバイダ・リストに登録する必要はありません。- パラメータ:
algorithm
- 要求するアルゴリズムの名前。 標準アルゴリズム名の詳細は、「Javaセキュリティ標準アルゴリズム名仕様」のMessageDigestの項を参照してください。provider
- プロバイダ- 戻り値:
- 指定されたアルゴリズムを実装する
MessageDigest
オブジェクト - 例外:
IllegalArgumentException
- 指定されたプロバイダがnull
の場合NoSuchAlgorithmException
- 指定されたアルゴリズムのMessageDigestSpi
実装が、指定されたProvider
オブジェクトから使用できない場合NullPointerException
-algorithm
がnull
である場合- 導入されたバージョン:
- 1.4
- 関連項目:
-
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
-
isEqual
public static boolean isEqual(byte[] digesta, byte[] digestb) 2つのダイジェストが等しいかどうかを比較します。 2つのダイジェストは、長さが同じで、対応する位置にあるすべてのバイトが等しい場合に等しくなります。- 実装上のノート:
digestb
がnull
であるか、長さがゼロ・バイトでないかぎり、digesta
内のすべてのバイトが等価性を判断するために検査されます。digestb
がnull
ではなく、長さがゼロ・バイトでない場合、計算時間は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
-
clone
public Object clone() throws CloneNotSupportedException実装が複製可能な場合は複製を返します。- オーバーライド:
clone
、クラスMessageDigestSpi
- 戻り値:
- 実装が複製可能な場合は複製。
- 例外:
CloneNotSupportedException
-Cloneable
をサポートしていない実装で呼び出された場合。- 関連項目:
-