哈希算法介绍---SHA1

哈希算法

什么是哈希算法
  • 哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
  • 一般来说满足这样的关系:f(data)=key,输入任意长度的data数据,经过哈希算法处理后输出一个定长的数据key。同时这个过程是不可逆的,无法由key逆推出data。
为什么使用哈希算法
  • 哈希算法的最本质应用,其实就是为了验证数据是否存在被修改的情况。
  • 同时,为了避免在传输过程中数据由于干扰所产生的Bit位相同,但某些数据被修改,可以通过这种方式进行验证。
哈希算法的流程
  • SHA1
    • 输入信息处理
      • 对输入的信息按512位进行分组并进行填充。如何填充信息报文呢?其实即使填充报文后使其按512进行分组后,最后正好余448位。那填充什么内容呢?就是先在报文后面加一个1,再加很多个0,直到长度满足对512取模结果为448。到这里可能有人会奇怪,为什么非得是448呢?这是因为在最后会附加上一个64位的报文长度信息,而448+64正好是512。
    • 填充长度
      • 最后会补充信息报文使其按512位分组后余448位,剩下的64位就是用来填写报文的长度信息的。至次可能大家也明白了前面说过的报文长度不能超过264位了。填充长度值时要注意必须是低位字节优先。
    • 信息分组处理
      • 经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组,可以得到一定数量的明文分组,我们用Y0,Y1,……YN-1表示这些明文分组。
      • 每个512位的明文分组,SHA1将其再分成16份更小的明文分组,称为子明文分组,每个子明文分组为32位,我们且使用M[t](t= 0, 1,……15)来表示这16个子明文分组。然后需要将这16个子明文分组扩充到80个子明文分组,我们将其记为W[t](t= 0, 1,……79),扩充的具体方法是:当0≤t≤15时,Wt = Mt;当16≤t≤79时,Wt = ( Wt-3 ⊕ Wt-8⊕ Wt-14⊕ Wt-16) <<< 1,从而得到80个子明文分组
    • 初始化缓存
      • SHA1采用160位的信息摘要,也以32位为计算长度,就需要5个链接变量。我们记为A、B、C、D、E。其初始赋值分别为:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476、E = 0xC3D2E1F0。
    • 计算信息摘要
      • SHA1有4轮运算,每一轮包括20个步骤,一共80步,最终产生160位的信息摘要,这160位的摘要存放在5个32位的链接变量中。
        对于这4轮计算虽然操作不同,但是逻辑是一样的首先,定义5个变量,假设为H0、H1、H2、H3、H4,对其分别进行如下操作
        (A)、将A左移5为与函数的结果求和,再与对应的子明文分组、E以及计算常数求和后的结果赋予H0。
        (B)、将A的值赋予H1。
        (C)、将B左移30位,并赋予H2。
        (D)、将C的值赋予H3。
        (E)、将D的值赋予H4。
        (F)、最后将H0、H1、H2、H3、H4的值分别赋予A、B、C、D、E。
    • 核心计算流程图
      在这里插入图片描述
哈希算法的总结
  • 哈希算法并不是加密算法的一种。哈希算法的目的就是为了验证原始数据是否被篡改。
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值