- java.lang.Object
-
- java.security.MessageDigestSpi
-
- 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
- 導入されたバージョン:
- 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を使用してダイジェストを更新します。-
クラス 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のリストをトラバースします。 指定されたアルゴリズムをサポートする最初のProviderのMessageDigestSpi実装をカプセル化する新しいMessageDigestオブジェクトが返されます。
登録済みプロバイダのリストは、
Security.getProviders()
メソッド経由で取得できます。- 実装上のノート:
- JDKリファレンス実装では、
jdk.security.provider.preferred
Security
プロパティを使用して、指定されたアルゴリズムの優先プロバイダの順序を決定します。 これは、Security.getProviders()
によって返されるプロバイダの順序とは異なる場合があります。 - パラメータ:
algorithm
- 要求するアルゴリズムの名前。 標準的なアルゴリズム名については、「Javaセキュリティ標準アルゴリズム名指定」のMessageDigestセクションを参照してください。- 戻り値:
- 指定されたアルゴリズムを実装する
MessageDigest
オブジェクト - 例外:
NoSuchAlgorithmException
-Provider
が、指定されたアルゴリズムのMessageDigestSpi
実装をサポートしていない場合NullPointerException
-algorithm
がnull
である場合- 関連項目:
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
-algorithm
がnull
である場合- 関連項目:
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
-algorithm
が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()
このメッセージ・ダイジェスト・オブジェクトの文字列表現を返します。
-
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
-
clone
public Object clone() throws CloneNotSupportedException
実装が複製可能な場合は複製を返します。- オーバーライド:
clone
、クラスMessageDigestSpi
- 戻り値:
- 実装が複製可能な場合は複製。
- 例外:
CloneNotSupportedException
-Cloneable
をサポートしていない実装で呼び出された場合。- 関連項目:
Cloneable
-
-