SHA1与SHA256加密


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM