網站首頁 教育 學前教育 精緻生活 飲食養生 命理 科普教育 金融 歷史 影視 數碼 熱門資訊
當前位置:生活百科站 > 科普教育 > 

可以詳細解釋sha256演算法的步驟嗎?

欄目: 科普教育 / 釋出於: / 人氣:2.1W
可以詳細解釋sha256演算法的步驟嗎?

SHA256演算法描述:

一、補位:資訊必須進行補位,以使其長度在對512取模以後的餘數是448。也就是說,(補位後的訊息長度)Q2 = 448。即使長度已經滿足對512取模後餘數是448,補位也必須要進行。

補位是這樣進行的:先補一個1,然後再補0,直到長度滿足對512取模後餘數是448。總而言之,補位是至少補一位,最多補512位。以資訊“abc”為例顯示補位的過程。

原始資訊:01100001 01100010 01100011。

補位第一步:0110000101100010 01100011 1。

首先補一個“1”。

補位第二步:0110000101100010 01100011 10…..0。

然後補423個“0”。

我們可以把最後補位完成後的資料用16進位制寫成下面的樣子。

61626380 0000000000000000 00000000。

00000000 0000000000000000 00000000。

00000000 0000000000000000 00000000。

00000000 00000000。

現在,資料的長度是448了,我們可以進行下一步操作。。

二、補長度:所謂的補長度是將原始資料的長度補到已經進行了補位操作的訊息後面。通常用一個64位的資料來表示原始訊息的長度。如果訊息長度不大於2^64,那麼第一個字就是0。在進行了補長度的操作以後,在進行了補長度的操作以後,整個訊息就變成下面這樣了(16進位制格式)。

61626380 0000000000000000 00000000。

00000000 0000000000000000 00000000。

00000000 0000000000000000 00000000。

00000000 0000000000000000 00000018。

三、使用的常量:在SHA256演算法中,用到64個常量,這些常量是對自然數中前64個質數的立方根的小數部分取前32bit而來。這64個常量如下:

428a2f98 71374491 b5c0fbcf e9b5dba5 。

3956c25b 59f111f1 923f82a4 ab1c5ed5 。

d807aa98 12835b01 243185be 550c7dc3 。

72be5d74 80deb1fe 9bdc06a7 c19bf174 。

e49b69c1 efbe4786 0fc19dc6 240ca1cc 。

2de92c6f 4a7484aa 5cb0a9dc 76f988da 。

983e5152 a831c66d b00327c8 bf597fc7 。

c6e00bf3 d5a79147 06ca6351 14292967 。

27b70a85 2e1b2138 4d2c6dfc 53380d13 。

650a7354 766a0abb 81c2c92e 92722c85 。

a2bfe8a1 a81a664b c24b8b70 c76c51a3 。

d192e819 d6990624 f40e3585 106aa070 。

19a4c116 1e376c08 2748774c 34b0bcb5 。

391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 。

748f82ee 78a5636f 84c87814 8cc70208 。

90befffa a4506ceb bef9a3f7 c67178f2。

四、需要使用的函式

CH(x, y, z) = (x AND y) XOR ( (NOT x) AND z)。

MAJ( x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)。

BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR ROTR^22(x)。

BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR ROTR^25(x)。

SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR SHR^3(x)。

SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR SHR^10(x)。

其中 x、y、z皆為32bit的字。。

ROTR^2(x)是對x進行迴圈右移2位。。

五、計算訊息摘要:

基本思想:就是將訊息分成N個512bit的資料塊,雜湊初值H(0)經過第一個資料塊得到H。

(1)H。

(1)經過第二個資料塊得到H。

(2)依次處理,最後得到H(N),然後將H(N)的8個32bit連線成256bit訊息摘要。

I、雜湊初值H(0)。

SHA256演算法中用到的雜湊初值H(0)如下:

H(0)0 = 6a09e667。

H(0)1 = bb67ae85。

H(0)2 = 3c6ef372。

H(0)3 = a54ff53a。

H(0)4 = 510e527f。

H(0)5 = 9b05688c。

H(0)6 = 1f83d9ab。

H(0)7 = 5be0cd19。

II、計算過程中用到的三種中間值

1、64個32bit字的message schedule標記為w0、w1、…、w63。

2、8個32bit字的工作變數標記為a、b、c、d、e、f、g。。

3、包括8個32bit字的雜湊值標記為H(i)0、…、H(i)7。。

III、工作流程

原始訊息分為N個512bit的訊息塊。每個訊息塊分成16個32bit的字標記為M(i)0、M(i)1、M(i)2、…、M(i)15然後對這N個訊息塊依次進行如下處理。

For i=1 to N。

(1)For t = 0 to 15。

Wt = M(i)t。

For t = 16 to 63。

Wt = SSIG1(W(t-2)) + W(t-7) + SSIG0(t-15) + W(t-16)。

(2)a = H(i-1)0 。

b = H(i-1)1。

c = H(i-1)2。

d = H(i-1)3。

e = H(i-1)4。

f = H(i-1)5。

g = H(i-1)6。

h = H(i-1)7。

(3)For t = 0 to 63。

T1 = h + BSIG1(e) + CH(e,f,g) + Kt + Wt。

T2 = BSIG0(a) + MAJ(a,b,c)。

h = g。

g = f。

f = e。

e = d + T1。

d = c。

c = b。

b = a。

a = T1 + T2。

(4)H(i)0 = a + H(i-1)0。

H(i)1 = b + H(i-1)1。

H(i)2 = c + H(i-1)2。

H(i)3 = d + H(i-1)3。

H(i)4 = e + H(i-1)4。

H(i)5 = f + H(i-1)5。

H(i)6 = g + H(i-1)6。

H(i)7 = h + H(i-1)7。

對N個訊息塊依次進行以上四步操作後將最後得到的H(N)0、H(N)1、H(N)2、…、H(N)7串聯起來即可得到最後的256bit訊息摘要。

Tags:sha256 演算法