sha演算法家族包括sha-1、sha-224、sha-256、sha-384、sha-512幾種演算法,接下來就以最具代表性的sha-1演算法的具體計算過程。
sha-1是一種能夠根據上限為264位元的資訊計算出160位元的單向雜湊函式。
演算法分析:
1)填充
sha-1演算法的輸入首席資訊官度在0到264位元之間,為了後續處理,會在資訊的末尾新增多餘的資料,使其長度為512位元的整數倍。512位元是sha-1演算法的輸入分組長度。
填充過程:
·在訊息末尾新增乙個1位元的數值「1」,此時,資訊的長度增加1位元。
·在訊息末尾繼續追加0,直到訊息的長度達到512位元的整數倍,最後乙個分組需要保留最後64位元,以便儲存原始輸入資訊的長度。
·在最後乙個分組的最後64位需要儲存原始輸入資訊的長度,因此輸入資訊的最大長度是264位元。
2)計算w0 ~ w79
填充完成之後,對每個輸入分組計算80個32位元的值(w0 ~ w79),這80個值用於「單步處理」階段使用。
計算過程:
·針對512位元的輸入分組進行切分,切分為16個32位元的分組,命名為w0 ~ w15,然後,計算剩餘的w16 ~ w79。
·公式:wt = (wt - 16⊕wt - 14⊕wt - 8⊕wt - 3)迴圈左移1位元。迴圈左移的意思是,將位元序列逐一向左平移,最高位的位元移動到最低位。
⊕表示異或操作,安裝上面的計算邏輯計算出w0 ~ w79,計算數量較大,但計算邏輯較簡單。
3)分組處理
接下來,需要對輸入分組進行80個步驟處理,目的是根據輸入分組的資訊來改變內部狀態(160位元),對所有的輸入分組都要執行這一操作。
160位元的內部狀態是通過名為a、b、c、d、e的5個32位元的緩衝區來表示。如圖所示,這一步是將5個緩衝區的值與輸入分組的資訊進行混合,然後再執行80個步驟的處理。這80個步驟所完成的操作,就是將輸入分組的512位元的資料,與sha-1所保持的160位元的內部狀態進行混合。通過上述80個步驟的反覆執行,sha-1就能夠將已經過填充的訊息全部混入這160位元的內部狀態中,而sha-1所輸出的雜湊值,就是所有處理結束之後最終的內部狀態(160位元)。
4)單步處理
「3)分組處理」中提到的80個步驟,其中每個步驟詳細流程如下圖:
這些處理非常複雜,目的是為了根據w0 ~ w79的資訊是內部狀態(即a、b、c、d、e的值)產生變化。
在乙個步驟完成後,緩衝區a、b、c、d的內容會被分別複製到b、c、d、e中(其中b要迴圈左移30位元之後再複製),而緩衝區e的內容則會與其它緩衝區的內容自己wt、kt相加之後再被複製到緩衝區a中。
由於上述處理要迴圈80個步驟,因此分組中1個位元發生變化,都會影響到雜湊值中幾乎所有的位元,通過這樣的方式,就能夠實現單向雜湊函式所具備的性質。
注:本文參照《**密碼技術》一書。
SHA1 摘要演算法
sha1 演算法 訊息摘要演算法,把訊息按照512 bits進行分組,不斷的對5個int型變數進行計算,直到所有訊息都運算完畢。最終得到 160 bit 即 20 位元組的雜湊值。流程圖 c語言實現 用到的資料結構 sha1演算法的上下文,儲存一些狀態,中間資料,結果 typedef struct ...
訊息摘要演算法 數字摘要
為了保證檔案或值的安全性,因為使用訊息摘要生成的值是不可篡改的 特點 準備工作 string input 訊息摘要 string algorithm md5 public static void main string args throws exception 建立乙個訊息摘要物件messaged...
訊息摘要演算法簡介
訊息摘要演算法簡介 一 什麼是訊息摘要演算法 訊息摘要演算法的主要特徵是加密過程不需要金鑰,並且經過加密的資料無法被解密,只有輸入相同的明文資料經過相同的訊息摘要演算法才能得到相同的密文。訊息摘要演算法不存在金鑰的管理與分發問題,適合於分布式網路相同上使用。由於其加密計算的工作量相當可觀,所以以前的...