摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

文章详细阐述了摘要算法如MD5、SHA1、SHA256和SHA512的数据预处理步骤,包括填充比特、附加消息长度,以及摘要计算过程中的常量初始化、分组处理和轮函数。同时介绍了MAC算法的工作原理,以HmacMD5为例,涉及密钥扩展和两次哈希操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

 

一、摘要算法大致都要经过以下步骤

1. 明文数据预处理

1.1 填充比特

1.2 附加消息长度

2. 摘要计算

2.1 常量初始化

2.2 分组及分组拓展和分组分段

2.3 轮函数(每段一轮,此外MD5还会重复4轮)

2.4分组摘要结果

2.5 组间数值传递

2.6 输出摘要  

二、MAC算法


一、摘要算法大致都要经过以下步骤

1. 明文数据预处理

1.1 填充比特

MD5、SHA1、SHA256  的分组长度都是512bit   需要填充比特使其位长对512求余的结果等于448

SHA512                          的分组长度是  1024bit   需要填充比特使其对1024求余的结果等于896


相同:

填充内容都是:先填充一个1,后面跟对应个数的0

刚好512求余的结果等于448时也要附加一个分组

以MD5例:

 61 62 63 64 31 32 33 34     >>>        61 62 63 64 31 32 33 34 80 00 00  ... 00 00

1.2 附加消息长度

不同:

MD5                           附加消息长度(64bit表示)     转小端字节序

SHA1、SHA256        附加消息长度(64bit表示)     无需转小端字节序  

SHA512                     附加消息长度(128bit表示)   无需转小端字节序


相同:

如果内容过长,64/128bit个比特放不下。就取低64/128bi

以MD5例:

00 00 00 00 00 00 00 40    转小端字节序   40 00 00 00 00 00 00 00

61 62 63 64 31 32 33 34 80 00 00  ... 00 00 附加消息长度
61 62 63 64 31 32 33 34 80 00 00  ... 00 00 40 00 00 00 00 00 00 00

2. 摘要计算

2.1 常量初始化

MD5                           4个64bit初始化常量           64个K   

SHA1                         5个64bit初始化常量           4个K   

SHA256                     8个64bit初始化常量           80个K          

SHA512                     8个128bit初始化常量         80个K      



2.2 分组及分组拓展和分组分段

MD5、SHA1、SHA256  的分组长度都是512bit    SHA512的分组长度是  1024bit   

MD5           512bit分为16段每段32bit     无需拓展                                  改成小端字节序

SHA1         512bit分为16段每段32bit     加上了扩展出来的64段,共80段         不用改    

SHA256     512bit分为16段每段32bit     加上了扩展出来的64段,共80段         不用改 

SHA512    1024bit分为16段每段64bit    加上了扩展出来的64段,共80段         不用改 


SHA1 分组拓展

SHA1与SHA0的区别就是在扩展这64段的时候,增加了CLS1(循环左移1位)

SHA256  和 512 分组拓展

Wt = \sigma0( W_{ t -2}) + W_{t -7} + \sigma1( W_{ t -15})+ W_{t -16}
σ0(x)=R1(x)⊕R8(x)⊕S7(x)
σ1(x)=R19(x)⊕R61(x)⊕S6(x)
Rn(x)对变量x循环右移nbit
Sn(x)对变量x左移nbit,右边填充0


2.3 轮函数(每段一轮,此外MD5还会重复4轮)

 红色田字方块或+号代表 mod  2^32^ 相加,即将两个数字加在一起,如果结果大于$ 2^32^ , 需除以 2^32^ 并找到余数

 MD5

F 函数有四个
循环轮数          对应的逻辑函数          (&是与,|是或,!~是非,^是异或)
1                        F(X,Y,Z)        (X & Y) | (~X & Z)
2                        G(X,Y,Z)        X & Z | Y&(~Z)
3                        H(X,Y,Z)      X^Y^Z
4                        I(X,Y,Z)        Y^(X | ~Z)

SHA1

SHA256

∑0(x)=S2(x)⊕S13(x)⊕S22(x)
∑1(x)=S6(x)⊕S11(x)⊕S25(x)
Rn(x)对变量x循环右移nbit
Sn(x)对变量x左移nbit,右边填充0

SHA512

∑0(x)=R28(x)⊕R34(x)⊕R39(x)
∑1(x)=R14(x)⊕R18(x)⊕R41(x)

2.4分组摘要结果

最后一轮的输出和第一轮的输入即初始化常量相加(模2的32次方)

以SHA512为例


2.5 组间数值传递

取决于分组加密模式 ECB CBC OFB CFB

分组加密模式 ECB CBC OFB CFB_qq_36488756的博客-CSDN博客

2.6 输出摘要  

MD5           转为大端字节序然后拼接得到128bit输出
SHA1         拼接得到128bit输出
SHA256     拼接得到258bit输出
SHA512     拼接得到512bit输出

二、MAC算法

MAC算法其实就是两次加盐,两次hash的一种hash算法
以HmacMD5为例

m        明文
K’        扩展后的密钥
ipad        0x36
opad        0x5c
||        级联
H        hash函数

1.密钥K拓展为K'
1) 假设密钥"a12345678"转Hex编码
    61 31 32 33 34 35 36 37 
2) 然后填充0,让密钥长度到达算法的分组长度,MD5的话就是512bit
    61 31 32 33 34 35 36 37 38 00 00 ... 00 00
3) 如果密钥太长,就先进行MD5,再填充0
    16字节 + 一堆00
2.扩展后的密钥与0x36异或
61 31 32 33 34 35 36 37 38 00 00 ... 00 00
36 36 36 36 36 36 36 36 36 36 36 ... 36 36 

K'    57 07 04 05 02 03 00 01 0e 36 36 ... 36 36
3.与明文级联
假设明文"a1234567"转Hex编码
61 31 32 33 34 35 36

57 07 04 05 02 03 00 01 0e 36 36 ... 36 36 61 31 32 33 34 35 36
4.进行Hash算法
h1 = Hash(57 07 04 05 02 03 00 01 0e 36 36 ... 36 36 61 31 32 33 34 35 36)
5.扩展后的密钥K'与0x5c异或 
6.异或的结果与h1级联
7.再次进行Hash算法  de'dao'zu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值