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

 


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/15973432.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(1695)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示