900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

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

时间:2024-02-13 09:51:29

相关推荐

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

目录

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

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 0061 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

SHA2568个64bit初始化常量80个K

SHA5128个128bit初始化常量 80个K

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

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

MD5512bit分为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 分组拓展

σ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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。