SHA 256演算法流程

2021-10-04 18:08:53 字數 1864 閱讀 7141

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...