SHA1算法原理
经过Sha1算法可以把0<L<2^64位的数据转化成160位的信息摘要
一、 sha1算法原理简要概括
将任意长度的明文分组,每组为512位,最后一组若不足512位,就补位
从第一组开始,通过给定的初识缓冲区链接变量,经过80轮的运算之后,得到长度为160bit的字符串,字符串将参与下一组的运算中,以此类推,最后一组得到的160bit的字符串就是sha1加密结果
二、sha1算法详细说明
1、 补位,分组
补位是必须进行的,就算明文长度已经满足了512的倍数,也需要补位
补位方法如下:
2、 每组的运算
(一)、拓展份数
将每组的512bit分为16份32比特
将16份32比特数据扩充为80份32比特
我们设扩充前的16份的数据为Mt,扩充后80份的数据为Wt,(t代表第几份的份数)
扩充方法如下:
ROTL符号代表左移运算
Wt的前16份数据照搬Mt
从W16开始,W16 = (W13 异或 W8 异或 W2 异或W0)<<1
以此类推,直至扩展到W79
(二)、80轮的运算(第一轮)
每组512bit的数据都要经过80轮运算
运算公式如下
首先介绍abcde
每组80轮运算开始前,abcde都会被链接变量H赋初始值,链接变量H具有初始值,每组
运算结束后,链接变量H都会被得到的abcde与上一组得到链接变量所改变改变,如下图
最后一组512bit运算结束后产生的链接变量H组成最后的160位的sha1摘要
Ps
注意,上面图中的加法是取模加法
Sha1算法的w取32,也就是说
在sha1算法中,z = x+y实际上相当于z = (x + y)mod 2^32
其次介绍Kt
Kt是固定值:
可以看到,Kt的值是分段函数,论数的区间不同,值不同
再介绍Wt
Wt就是我们之前求的分组
最后是ft(b,c,d)
Ft(b,c,d)是一个分段函数,根据t(轮数)的不同,对应函数也不同
参考:
https://www.bilibili.com/video/BV1Ua411679P?from=search&seid=11379127425917077872&spm_id_from=333.337.0.0
SHA256算法原理
SHA1与SHA256加密算法还是比较像的
输出为256位
一、拓展,分组
把明文拓展为512位的倍数
二、拓展份数
把512bit的组拆分为16份32bit的数据
再把16份32bit的数据拓展为64份32bit的数据
拓展公式:
Rightrotate:循环右移
Rightshift: 右移
三、64次循环加密
加密流程图:
每组512bit数据都要经过64轮的运算
1、 首先介绍abcdefgh
每组512bit数据开始循环前,都要对abcdefgh进行初始化
初始化依靠链接变量H,H具有初始值,其次,每64轮运算结束后得到的abcdefgh都会赋
予链接变量新值
Abcdefgh初始化如下:
链接变量初始值如下:
每组512bit数据运算结束后,都要进行链接变量的转化,转化方法如下:
最终得到的H就是SHA256摘要的结果
2、 再介绍Kj
Kj是固定值
3、再介绍Σ0与Σ1与Ch
4、Wj
Wj就是我们从16份拓展到64份的数据
SHA256算法参考下文
https://www.zhihu.com/tardis/sogou/art/94619052