報文摘要(MD)是一種用於檢查報文是否正確的方法(例如信道噪音的干擾)
基本介紹
- 中文名:報文摘要
- 類別:專業名詞
- 特點:檢查報文
- 內容:是否正確
定義,摘要簡介,算法,作用,注意,
定義
報文摘要是指單向哈希函式算法將任意長度的輸入報文經計算得出固定位的輸出稱為報文摘要.所謂單向是指該算法是不可逆的找出具有同一報文摘要的兩個不同報文是很困難的。
摘要簡介
MessageDigest類為應用程式提供信息摘要算法的功能,如MD5或SHA算法。信息摘要是安全的單向哈希函式,它接收任意大小的數據,輸出固定長度的哈希值。
MessageDigest對象開始被初始化。該對象通過使用update方法處理數據。任何時候都可以調用reset方法重置摘要。一旦所有需要更新的數據都已經被更新了,應該調用digest方法之一完成哈希計算。
對於給定數量的更新數據,digest方法只能被調用一次。digest被調用後,MessageDigest對象被重新設定成其初始狀態。
算法
以MD5報文摘要算法 為例
術語和符號
本文中一個“字”是32位,一個“位元組”是8位。一系列位串可看成是一系列位元組的普通形式,
其中的連續的8位看成一個位元組,高位在前,同理一系列位元組串可看成是一系列32位的字,其中每
個連續的4個位元組當作一個字,低位在前。
我們定義x_i代表“x減去I".如果下劃線左邊的是一個表達式,則用括弧括住,如:
x_{i+1}。同樣我們用^代表求冪,這樣x^i則代表x的i次冪。
符號“+”代表字的加,X<<<s代表32位的值X循環左移s位,not(X)代表X的按位
補運算,XvY表示X和Y的按位或運算,XxorY代表X和Y的按位異或運算,XY代表
X和Y的按位與運算。
MD5算法描述
我們假設有一個b位長度的輸入信號,希望產生它的報文摘要,此處b是一個非負整數,b也可
能是0,不一定必須是8的整數倍,它可能是任意大的長度。我們構想信號的比特流如下所示:
m_0m_1...m_{b-1}
下面的5步計算信息的報文摘要。
(1)補位
MD5算法是對輸入的數據進行補位,使得如果數據位長度LEN對512求余的結果是448。即數
據擴展至K*512+448位。即K*64+56個位元組,K為整數。補位操作始終要執行,即使數據長度LEN
對512求余的結果已是448。
具體補位操作:補一個1,然後補0至滿足上述要求。總共最少要補一位,最多補512位。
(2)補數據長度
用一個64位的數字表示數據的原始長度b,把b用兩個32位數表示。那么只取B的低64位。
當遇到b大於2^64這種極少遇到的情況時,這時,數據就被填補成長度為512位的倍數。也就是說,
此時的數據長度是16個字(32位)的整數倍數。用M[0...N-1]表示此時的數據,其中的N是16
的倍數。
(3)初始化MD緩衝器
算法
實現可隨意選擇是否實現Cloneable接口。客戶端套用程可以通過嘗試複製和捕獲CloneNotSupportedException測試可複製性:
MessageDigestmd=MessageDigest.getInstance("SHA");
try{
md.update(toChapter1);
MessageDigesttc1=md.clone();
byte[]toChapter1Digest=tc1.digest();
md.update(toChapter2);
...etc.
}catch(CloneNotSupportedExceptioncnse){
thrownewDigestException("couldn'tmakedigestofpartialcontent");
}
作用
注意
1,如果給定的實現是不可複製的,而事先已知摘要的數目,則仍然能夠通過實例化幾個實例計算中間摘要。
2,由於歷史原因,此類是抽象的,是從MessageDigestSpi擴展的。應用程式開發人員只應該注意在此MessageDigest類中定義的方法;超類中的所有方法是供希望提供自己的信息摘要算法實現的加密服務提供者使用的。