哈希算法介绍---SHA256

建议
  • 大家可以先学习SHA1再来看本文,个人感觉这样理解会比较好

SHA256算法流程

  • 常量定义—建议大家直接看官方手册
    • SHA256算法中用到了8个哈希初值以及64个哈希常量
      • SHA256算法的8个哈希初值如下:

        在这里插入图片描述

      • 64个哈希常量
        在这里插入图片描述

  • 信息预处理
    SHA256算法中的预处理就是在想要Hash的消息后面补充需要的信息,使整个消息满足指定的结构。
    • 信息的预处理分为两个步骤:附加填充比特和附加长度
    • 附加填充比特
      • 报文末尾进行填充,使报文长度在对512取模以后(本质上就是将报文长度以512切块,并在最后一块进行补充长度信息)的余数是448。填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。
      • 需要注意的是,信息必须进行填充,也就是说,即使长度已经满足对512取模后余数是448,补位也必须要进行,这时要填充512个比特。因此,填充是至少补一位,最多补512位。
    • 附加长度
      • 附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面。
        SHA256用一个64位的数据来表示原始消息的长度。
      • 因此,通过SHA256计算的消息长度必须要小于2^64 ,当然绝大多数情况这足够大了。
      • 长度信息的编码方式为64-bit big-endian integer
  • 信息摘要的计算
    • 首先,将消息分解成N个512bit大小的块。其实就是类似SHA1将消息分解。

    • 对于分解后的512bit再次拆分为16*32bit大小,这也是我们生成计算式中W_t的依据。

    • 我们对于摘要的计算,本质上就是每轮(512bit中)进行64次计算。计算的概念如下图所示。

      在这里插入图片描述

  • 逻辑计算分析
    • 针对上图中的逻辑计算进一步分析
    • 类似于SHA1,我们首先定义W_t和K_t的获取方式
      • W_t的定义如下
        在这里插入图片描述
      • K_t的定义是第t个密钥,对应我们上文提到的64个常量。
      • ABCDEFGH一开始的初始值分别为H_{i-1}(0),H_{i-1}(1),…,H_{i-1}(7) 。
      • 一些逻辑计算的符号规定
        在这里插入图片描述
        在这里插入图片描述
    • 64轮逻辑计算伪代码(建议参考官方文档)
      在这里插入图片描述
  • SHA256计算图总结
    在这里插入图片描述
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值