sha-256
輸入訊息:m
輸出訊息:256位(bit)hash值
步驟:訊息填充:m的長度 mod 512 = r,考慮r(r為輸入訊息長度按512bit進行分組後,最後一組的長度)
系統給出8個32位暫存器:a,b,c,d,e,f,g,h,其初始值分別取自8個素數(2,3,5,7,11,13,17,19)的平方根的小數部分其二進位制表示的前32位。例如:2
=1.4142135623...
\sqrt=1.4142135623...
2=1.4
1421
3562
3...
小數部分轉為二進位制 為0.0110
1010
0000
1001
1110
0110
0101
1101...
0.0110 \ 1010 \ 0000 \ 1001 \ 1110 \ 0110 \ 0101 \ 1101...
0.0110
1010
0000
1001
1110
0110
0101
1101
...即為a=0
x6a09
e667
a = 0x6a09e667
a=0x6a
09e6
67;相應地,b,c,d,e,f,g,h的初始化用了同樣的取值方法。最終,我們得到:
a =0
x6a09
e667b=
0xbb
67ae85
c=0x
3c6e
f372d=
0xa54
ff53a
e=0x
510e
527ff=
0x9b
05688cg
=0x1
f83d9
abh=
0x5b
e0cd
19a=0x6a09e667 \\ b=0xbb67ae85 \\ c=0x3c6ef372 \\ d=0xa54ff53a \\ e=0x510e527f \\ f=0x9b05688c \\ g=0x1f83d9ab \\ h=0x5be0cd19 \\
a=0x6a
09e6
67b=
0xbb
67ae
85c=
0x3c
6ef3
72d=
0xa5
4ff5
3ae=
0x51
0e52
7ff=
0x9b
0568
8cg=
0x1f
83d9
abh=
0x5b
e0cd
19首先,第一組以512位進行地分組進來後,再以32位為一組,分別儲存為w0,
…,w15
w_0,…,w_
w0,…,
w15
執行下列迴圈64次:
經過步驟4,我們的a,b,c,d,e,f,g,h和第一組512位的分組一起進行一系列操作後與初始的值完全不同了。此時,訊息m的第二個512位分組進入,與步驟4後生成的a,b,c,d,e,f,g,h一起,又迴圈執行步驟4的操作,……
當最後一組512位分組和前一組生成的a,b,c,d,e,f,g,h經過步驟4後,最終產生的a,b,c,d,e,f,g,h即為訊息m的hash值。
總結上述一系列操作我們可以發現,由於訊息m的每一位都參與了運算,且後續操作的輸入需要用到之前操作的輸出。因此,如果訊息m的某一位發生了改變,最終將導致得到的hash值與之前訊息m未改變時的hash值完全不同。這也是hash演算法的性質之一。
SHA 256演算法實現過程
1.定義8個32位常量 h0 0x6a09e667 h1 0xbb67ae85 h2 0x3c6ef372 h3 0xa54ff53a h4 0x510e527f h5 0x9b05688c h6 0x1f83d9ab h7 0x5be0cd192.再定義乙個k的32位整形陣列,陣列大小為64 k ...
SHA 256演算法改進策略
在我之前的文章中理了一下sha 256演算法的實現過程 為什麼要對其改進呢?先來看一下如何加密防刷 使用sha 256可以針對原始檔生成加密key,為乙個256位二進位制格式,表述為64位16進製制的字串格式,可以用於對網路鏈結中的核心引數進行加密處理,做法是 選用幾個核心引數,連成乙個源字串,然後...
雜湊函式 SHA1和SHA256演算法
sha2演算法是對sha1演算法的繼承。區別在於兩者的構造和簽名長度不同。sha 1通過4輪運算 每輪20步,共80步 將長度不超過264的輸入壓縮成為160bit的訊息摘要。初始化md緩衝區,需要160位來存放雜湊函式的初始變數 中間摘要和最終摘要。需要5個32位的暫存器。sha 1的框圖 sha...