SHA-512 逻辑

算法的最大输入长度小于2^128位的消息,消息输出是512位的消息摘要,输入消息以1024的分组为单位进行处理。迭代结构,处理消息、输出摘要的总体过程分为以下步骤:

步骤1:附加填充位:填充消息使其长度≡896(mod 1024)。填充由一个1 和后续的0组成。即使消息已经满足上述长度要求,仍然进行填充,因此填充位数在1~1024之间。填充由一个1和后续的0组成。

注:此处余896位的目的是为第二步骤,附加128位,896+128=1024,整个消息组为1024的整数倍。

**步骤2:附加长度:**在填充后的消息后附加128位的块,将其视为无符号整数,它包含前消息的长度。
前两步的结果是产生了一个长度为1024整数倍的消息,以便分组。
下图中,扩展的消息被表示为一串长度为1024位的消息分组M1,M2,….MN, 因此扩展消息的长度为N X 1024 位。
在这里插入图片描述
步骤三:初始化HASH缓冲区:Hash函数中间结果和最终结果保存在512位的缓冲区,缓冲区由8个64位的寄存器(a、b、c、d、e、f、g、h)表示,并将这些寄存器初始化为下列64位的整数(十六进制)
在这里插入图片描述
每个寄存器内容获取的方式是:取前8个素数(2、3、5、7、11、13、17、19)取平方根,取小数部分的前64位.
这些值以高位在前格式存储,也就是说,字的最高有效字节存于低地址字节位置(最左边)。
步骤四:以1024位的分组(128字节)为单位处理消息 :算法的核心是具有80轮运算的模块,步骤2图中,该模块标记为F。下图给出它的逻辑原理
在这里插入图片描述
每一轮都把512位缓冲区的值abcdefgh作为输入,并更新缓冲区的值。第一轮时,缓冲区里的值是中间值Hi-1 .每一轮,如第t轮,使用一个64位的值Wt,该值由当前被处理的1024消息分组Mi 导出,导出算法是下面将要讨论的消息扩展算法。每一轮还将使用的附加的常数Kt ,其中0≤t≤79,用来使每轮的运算不同。这些常数的获得方法如下:对前80个素数开立方根,取小数部分的前64位。这些常数提供了64位随机串组合,可以初步消除输入数据里的统计规律。
第80轮的输出和第一轮的输入Hi-1 相加产生Hi 。缓冲区的8个字和Hi-1 中对应的字分别进行模264 的加法运算。
对分组Mi进行消息扩展生成Wt,每个Wt64位,前16个Wt直接取自当前分组。余下的值按如下方式导出
在这里插入图片描述
在这里插入图片描述
 轮函数每一轮操作如下图
 在这里插入图片描述
从上图可以看出,轮函数有两个特点:
1、轮函数输出的8个字中的6个是通过简单的轮置换实现的。如上图的阴影部分。
2、输出中只有2个字通过替代操作产生。
字e是将输入变量(d,e,f,g,h)以及轮常数Kt和轮消息Wt作为输入的函数。
 字a是将除d之外的输入变量以及轮常数Kt和轮消息Wt作为输入的函数。
 在这里插入图片描述
步骤五:输出 所有的N个1024位分组都处理完以后,从第N阶段输出的是512位的消息摘要。
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值