1分钟 sha256


能帮到你的话,就给个赞吧 😘


众所周知,对于任意长消息,SHA256最后都会只输出一个256位。
如何做到呢,我们要先熟悉大体流程。
首先:将消息分解成512-bit大小的块(注意,必须每个都是512位哦,也就是输入不够话的就补,刚好够的话就不用补)
在这里插入图片描述接着我们定义H为哈希值(因为哈发h),并初始化为0。
则sha256大体流程如下。(Mi 就是消息块,也就是循环块次)
在这里插入图片描述
注意,为什么不叫加密,而叫映射呢,其实主要是不能把sha256看成加密,为什么,因为sha256只能加密,不能解密,所以,这就不能叫加密,对吧。

好,那么考考你,256位是多少字节,一瞬间说出来才算啊,哈哈,是32字节。ok,从现在开始到文章结束 我们说的字都等于4字节,没有例外。那么我们定义H,也就是哈希值应该是256位也就是8个字。即H[0]-H[7]。

接着我们再详细介绍组加密,也就是映射函数。
其中需要这些运算
>>>k:循环右移k比特运算
>>k:右移k比特运算
⊕:异或运算
∧:按位与
~:按位取反
和这6个函数
在这里插入图片描述

Map( H,Mi){
    //1)按照如下规则将Mi扩展成64个字。即w[0]-w[63],当然w[0]-w[15]就是Mi
    for i from 16 to 63
        s0= (w[i-15] ) >>> 7)⊕(w[i-15] >>> 18)⊕(w[i-15] >> 3)
        s1= (w[i-2] >>> 17)⊕(w[i-2] >>> 19)⊕(w[i-2] >> 10)
        w[i]= w[i-16] + s0 + w[i-7] + s1
    
    //2)迭代计算64次  
    //abcdefgh为8个32bit字,存放中间变量
    a= H0
    b= H1
    c= H2
    d= H3
    e= H4
    f= H5
    g= H6
    h= H7
    //按照如下规则计算
    for i from 0 to 63
        S1= (e >>> 6) ⊕ (e >>> 11) ⊕ (e >>> 25)
        Ch= (e∧ f) ⊕ ((~ e) ∧ g)
        temp1= h + S1 + Ch + k[i] + w[i]
        S0= (a >>> 2) ⊕ (a >>> 13) ⊕ (a >>> 22)
        Ma= (a∧b) ⊕ (a∧c)⊕(b∧c)
        temp2= S0 + Ma

        h= g
        g= f
        f= e
        e= d + temp1
        d= c
        c= b
        b= a
        a= temp1 + temp2

    //3)获取当前哈希值
    H0= H0 + a
    H1= H1 + b
    H2= H2 + c
    H3= H3 + d
    H4= H4 + e
    H5= H5 + f
    H6= H6 + g
    H7= H7 + h
}

要想更直观,得看图,要想更准确,就要看代码。
每次循环计算规则可以由下图描述,当然这个图看不懂,可以不用看,放出来只有一个目的,就是能直观的感受到每次循环需要Wt和Kt和那四个函数(也就是S0,S1,Ch,Ma,由于我打不出来那个数学符号就用大S代替~)。W是那64个字,K是什么呢,是64个常量,具体值我就不写了,你们可以看我参考的链接里有。
在这里插入图片描述
而扩展字规则则如下
在这里插入图片描述
便用了这两个函数,同样我还是打不出来便用小s代替。

参考:https://blog.csdn.net/u011583927/article/details/80905740
https://blog.csdn.net/u013073067/article/details/86600777

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HMACSHA256和SHA256都是密码学中常用的哈希算法,但它们之间有些许不同。 首先,SHA256是一种单独的哈希算法,它将任意长度的消息输入,并产生一个256位的哈希值作为输出。SHA256采用了一系列复杂的运算来处理输入,并保证输出的唯一性和不可逆性。 HMACSHA256是基于哈希函数(如SHA256)和密钥的消息验证算法。它通过在消息上加入一个密钥,并以此为基础运算,产生一个哈希值。HMACSHA256不仅考虑了消息的内容,还引入了密钥,可以提供更高的安全性和验证性能。 HMACSHA256和SHA256在应用中有不同的使用场景。SHA256通常用于单向哈希加密,用于数据完整性校验、数字签名等。而HMACSHA256则广泛应用于消息认证和完整性验证,它在验证过程中不仅考虑了消息内容,还加入了密钥,能够提供更强的防篡改和抵抗攻击的能力。 总结来说,SHA256是一种单纯的哈希算法,而HMACSHA256是在SHA256的基础上进一步加入了密钥,用于提供更高的安全性和验证性能。具体选择哪种算法取决于具体的应用场景和安全要求。 ### 回答2: HMAC-SHA256和SHA256是两种常见的加密算法。SHA256是一种单向哈希函数,用于将输入数据转换为256位固定长度的哈希值。这个哈希值具有唯一性和不可逆性,即无法从哈希值还原出原始数据。 HMAC-SHA256是使用SHA256加密算法与一个密钥结合而成的消息认证码算法。它通过将密钥与消息进行异或运算,并使用SHA256对结果进行多次哈希计算来生成最终的哈希值。HMAC-SHA256不仅能够确保消息的完整性,还可以验证消息的发送者身份。 相较于单纯的SHA256算法,HMAC-SHA256算法具有更高的安全性。首先,通过添加密钥的使用,它能够防止恶意攻击者在传输过程中对消息进行篡改。其次,HMAC-SHA256算法使用了多次哈希计算,增加了攻击者计算哈希碰撞的难度,提高了防碰撞性能。 在实际应用中,HMAC-SHA256常用于数字签名、数据完整性验证、身份验证等场景。其广泛应用于各种安全领域,如密码学、网络通信、电子商务等。 总结来说,HMAC-SHA256是在SHA256算法的基础上结合密钥生成的消息认证码,具有更高的安全性和防护性能。它的应用能够确保消息的完整性、防止篡改和验证发送者身份,广泛应用于各种安全领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值