已解决

sha256算法可以详细解释一下吗 10

sha256算法可以详细解释一下吗  


月月月

2020.09.18
398
收藏

1个答案:

Diva

2020.09.18

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

注:这些初值是对自然数中前8个质数3、5、7、11等的平方根的小数部分取前32bit而来。


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消息摘要。


评论(0) 赞赏(0)

撰写答案:

1.描述你的问题

2.贴上相关代码

3.贴上报错信息

4.贴上相关截图

5.你已经尝试了哪些方法仍然没解决(附上相关链接)

提交答案

感谢您的善举,每一次解答会成为新人的灯塔。回答被采纳后获得20算力和相应LK币奖励。

关闭