Java.security.MessageDigestクラスを知っています


Java暗号化テクノロジー:メッセージの概要.
メッセージの要約は、データ・ブロックのデジタル・フィンガープリントです.すなわち、任意の長さの1つのデータブロックを計算し、一意のフィンガープリントを生成する(SHA 1に対して20バイトのバイナリ配列を生成する).
メッセージ・サマリーには、次の2つの基本プロパティがあります.
2つの異なる文書は同じ要約を生成することが困難で指定された要約に対して1つの文書を生成することが困難であり、この文書から指定された要約代表を反推定する:米国国家標準技術研究所のSHA 1とマサチューセッツ工科大学Ronald Rivestが提出したMD 5
クラスjava.security.MessageDigest
java.lang.Object
   |
   +----java.security.MessageDigest

public abstract class
MessageDigest
extends
Object
MessageDigestは、MD 5やSHAなどのメッセージ要約アルゴリズムの機能を提供します.メッセージ・サマリーは、任意のサイズのデータを使用して固定長のハッシュ値を出力する安全な一方向ハッシュ関数です.
Javaセキュリティの他のアルゴリズムベースクラスのように、MessageDigestには2つの主要なコンポーネントがあります.
メッセージサマリAPI(アプリケーションインタフェース)
これは、メッセージサマリーサービスを必要とするアプリケーション呼び出しのメソッドのインタフェースです.このAPIはすべての共有メソッドから構成される.
メッセージ概要SPI(サービスプロバイダインタフェース)
このインタフェースは、特殊なアルゴリズムを提供するプロバイダによって実現されるインタフェースである.すべての名前で接頭辞が
Engineの方法構成.このような各方法は、対応する名前を有する共通のAPI方法によって呼び出される.たとえば、engineResetの方法はresetメソッド呼び出し.SPIの方法は抽象的である.プロバイダは、具体的な実装を提供する必要があります.
MessageDigestオブジェクトは起動時に初期化されます.updateメソッドを使用してデータを処理します.resetは、任意の場所でサマリーをリセットするために呼び出すことができます.変更が必要なすべてのデータが変更されると、digestメソッドが呼び出され、ハッシュコードの計算が完了する.
所定の回数の変更については、digestメソッドのみが呼び出されます.digestが呼び出された後、MessageDigestオブジェクトは初期化された状態にリセットされる.
Cloneableインタフェースを自由に実装できます.これにより、お客様のアプリケーションは、レプリケーション前にinstanceof Cloneableでレプリケーション性をテストできます.
 
 MessageDigest md = MessageDigest.getInstance("SHA");
 if (md instanceof Cloneable) {
     md.update(toChapter1);
     MessageDigest tc1 = md.clone();
     byte[] toChapter1Digest = tc1.digest;
     md.update(toChapter2);
     ...etc.
 } else {
     throw new DigestException("couldn't make digest of partial content");
 }
 

指定されたインプリメンテーションが複製できない場合、要約の数が事前に知られている場合でも、いくつかのインスタンスを例に中間の要約を計算することができることに注意してください.
こうぞうし
MessageDigest
 protected MessageDigest(String algorithm)

指定したアルゴリズム名でメッセージのサマリーを作成します.
 
パラメータ:
Algorithm-サマリーアルゴリズムの標準文字列名.Javaパスワード構造API説明書&参考の付録A.-->
方法
getInstance
 public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException

指定したサマリーアルゴリズムを実装するMessageDigestオブジェクトを生成します.デフォルトのプロバイダ・パッケージにアルゴリズムを実装したMessageDigestサブクラスが含まれている場合、サブクラスのインスタンスが返されます.アルゴリズムがデフォルトのパケットで使用できない場合は、他のパケットが検索されます.
 
パラメータ:
Algorithm-申請のアルゴリズム名.Javaパスワード構造API説明書&参考の付録A.-->
戻り値:
指定したアルゴリズムを実装するMessage Digestオブジェクト.
放出:
NoSuchAlgorithmException
呼び出し環境でアルゴリズムが使用できない場合.
getInstance
 public static MessageDigest getInstance(String algorithm,
String provider) throws
NoSuchAlgorithmException,
NoSuchProviderException

MessageDigestオブジェクトを生成し、指定されたアルゴリズムを実装します.プロバイダのアルゴリズムが使用可能である場合、このアルゴリズムはプロバイダによって提供されます.
 
パラメータ:
Algorithm-申請のアルゴリズム名.Javaパスワード構造API説明書&参考の付録A.-->
provider-プロバイダの名前.
戻り値:
指定したアルゴリズムを実装するMessage Digestオブジェクト.
放出:
NoSuchAlgorithmException
アルゴリズムが申請した呼び出し者が提供したパケットで使用できない場合.
放出:
NoSuchProviderException
プロバイダが環境で使用できない場合.
以下を参照してください.
Provider
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 byte[] digest(byte input[])

指定したバイト配列を使用して、サマリーの最後の変更を実行し、サマリー計算を完了します.すなわち,この方法はまず配列に対して呼び出される.
update、そして呼び出す
digest() .
 
パラメータ:
input-サマリー計算が完了する前に変更する入力値.
戻り値:
結果ハッシュ値のバイト配列.
toString
 public String toString()

メッセージの要約オブジェクトの文字列表示を返します.
 
上書き:
クラス#クラス#
Object
toString
isEqual
 public static boolean isEqual(byte digesta[],
                               byte digestb[])

2つのサマリーが同じかどうかを比較します.簡単な比較を行います.
 
パラメータ:
digesta-比較するサマリー.
digestb-比較する別の要約.
戻り値:
2つのサマリーが等しい場合はtrue、そうでない場合はfalseです.
reset
 public void reset()

このサマリーは、将来の使用のためにリセットされます.
メッセージの要約は、データ・ブロックのデジタル・フィンガープリントです.すなわち、任意の長さの1つのデータブロックを計算し、一意のフィンガープリントを生成する(SHA 1に対して20バイトのバイナリ配列を生成する).
メッセージ・サマリーには、次の2つの基本プロパティがあります.
2つの異なる文書は同じ要約を生成することが困難であり、指定された要約に対して1つの文書を生成することが困難であり、この文書からこの指定された要約代表を反推定する:米国国家標準技術研究所のSHA 1とマサチューセッツ工科大学Ronald Rivestが提出したMD 5.
メッセージ要約MD 5とSHAの使用方法:
まずMessageDigestクラスを生成し、計算方法を決定します.
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
計算の要約を追加する情報
alga.update(myinfo.getBytes());
要約の計算
byte[] digesta=alga.digest();
他の人に送るあなたの情報と要約
他の人は同じ方法で初期化し、情報を追加し、最後に要約が同じかどうかを比較します.
algb.isEqual(digesta,algb.digest())
関連AIP
JAva.security.MessageDigestクラス
static getInstance(String algorithm)
指定したアルゴリズムを実装するMessageDigestオブジェクトを返します.
パラメータ:SHA-1またはMD 5などのアルゴリズム名
void update (byte input)
void update (byte[] input)
void update(byte[] input, int offset, int len)
計算の要約を追加する情報
byte[] digest()
計算を完了し、計算結果の要約(MD 5に対して16ビット、SHAに対して20ビット)を返す
void reset()
リセット
static boolean isEqual(byte[] digesta, byte[] digestb)
2つのサマリーが同じかどうか
コード:import java.security.*;
public class myDigest { public static void main(String[] args) {
myDigest my = new myDigest(); my.testDigest(); }
public void testDigest(){try{String myinfo=「私のテスト情報」;
//java.security.MessageDigest//alg=java.security.MessageDigest.getInstgetInstance("MD 5");java.security.MessageDigest alga=java.security.MessageDigest.getIngetInstance("SHA-1");alga.update(myinfo.getBytes();byte[]digesta=alga.digest();System.out.println("この情報の要約は:"+byte 2 hex(digesta));byte 2 hex(digesta););//何らかの方法で他の人にあなたの情報を伝える(myinfo)と要約(digesta)相手は、正常java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");algb.update(myinfo.getBytes();if(algb.isEqual(digesta,algb.digest(){System.out.println("情報チェック正常");}else{System.out.out.println("要約が異なる");}else{System.out.println("要約が異なる");
}catch(java.security.NoSuchAlgorithmException ex){System.out.println(「不正な要約アルゴリズム」);
}
public String byte 2 hex(byte[]b)/2行回転文字列{String hs=";String stmp=";for(int n=0;nreturn hs.toUpperCase(); }
}
b[n]&0 XFFの役割はbyteをintに変換することである.
0 xffは整数型なのでbyte[]b;b[index]&0 xffは大きなデータ型に近づくと整数型になります.
JAvaのbyteはsignなので、負のbyteをintに強制的に変換すると、byte bb=(byte)0 xf 1;//1111000001 printBinary((int)bb);/1111111111111111111111111111111111111111111111110001
printBinary(bb & 0xff);//00000000000000000000000011110001
実行結果:
int: -15 binary:
11111111111111111111111111110001
int: 241 binary:
00000000000000000000000011110001