安全散列算法 SHA 256


主要看了《基於FPGA 的SHA-256 算法實現》 和 《Sha-1算法詳解》,但是它講的也不是很清楚。

對任何長度的報文(就是你要加密的信息),它計算出來都是 一個 32個byte的 結果,可以稱之為驗證碼。 等你拿到報文 和 驗證碼之后, 自己對報文進行SHA 256算法,把計算出的結果和收到的驗證碼比對,如果一樣,就說明 報文在傳輸過程中沒有被修改。

具體步驟:

SHA-256 算法輸入報文的最大長度不超過2^64 bit,輸入按512-bit 分組進行處理,產生
的輸出是一個256-bit 的報文摘要。該算法處理包括以下幾步:
STEP1:附加填充比特。對報文進行填充使報文長度與448 模512 同余(長度=448 mod 512),
填充的比特數范圍是1 到512,填充比特串的最高位為1,其余位為0。

就是先在報文后面加一個 1,再加很多個0,直到長度 滿足 mod 512=448.

為什么是448,因為448+64=512. 第二步會加上一個 64bit的 原始報文的 長度信息。


STEP2:附加長度值。將用64-bit 表示的初始報文(填充前)的位長度附加在步驟1 的結果
后(低位字節優先)。


STEP3:初始化緩存。使用一個256-bit 的緩存來存放該散列函數的中間及最終結果。
該緩存表示為A=0x6A09E667 , B=0xBB67AE85 , C=0x3C6EF372 , D=0xA54FF53A,
E=0x510E527F , F=0x9B05688C , G=0x1F83D9AB , H=0x5BE0CD19 。


STEP4:處理512-bit(16 個字)報文分組序列。該算法使用了六種基本邏輯函數,由64
步迭代運算組成。每步都以256-bit 緩存值ABCDEFGH 為輸入,然后更新緩存內容。
每步使用一個32-bit 常數值Kt 和一個32-bit Wt。
image

就像上圖一樣,參與運算的都是 32 bit的數,Wt 是 分組之后的報文,512 bit=32bit*16. 也就是 Wt t=1,2..16 由 該組報文產生。

Wt t=17,18,..,64 由 前面的Wt按遞推公式 計算出來。

Kt t=1,2..64 是已知的常數。

上面的計算就是不斷更新 a,b,c…h這 32bit*8 。在每個512bit的分組里面迭代計算64次。

那為什么是64次了?應該是它的算法就是這么規定的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM