Hash
算法又名哈希、杂凑、散列算法等,可用来进行数字完整保护、消息认证、数字签名等,典型的hash
算法有MD
、SHA(Secure hash Algorithm)
等。Hash
算法时一种单向算法,从原始数据得到加密后数据,但是加密后数据无法恢复到原数据,主要理解下MD5
的算法流程
Hash
算法大致流程

MD5(
信息摘要算法
)
简介
MD
是message digest
信息摘要的简写,输入的原始数据经过MD5
算法生成128
比特的摘要信息。MD
算法只能生成摘要信息,而不能从摘要信息恢复原始数据。
MD5
整体流程

Appending padding bits
增加padding
第一个数据为1
后续数据比特均为0
,增加padding
后需要满足整体length mod 512 = 448
。

Append length
64
比特的长度信息,如果信息的总长度大于2^64
次方,则需要采用2^64
次方进行取模运算,添加数据长度后的总长度为512
的倍数。
Initialize MD buffer
需要128
比特进行存储初始及最终的信息摘要值,初始值A = 67452301 B = EFCDAB89 C = 98BADCFE D = 10325476
;按字节填写Word A: 01 23 45 67 Word B: 89 AB CD EF Word C: FE DC BA 98 Word D: 76 54 32 10
Process message in 512-bit (16-word) blocks
将添加padding
和数据长度后的信息分成512
长度的多组进行处理,MD5
主要的生成流程

在MD5
计算过程中,每个分组的计算可分为4
个loop
,每个loop
采用F
、G
、H
、I
函数功能略有差别,而每个loop
又有16
个step
,每个step
处理不同的X(
输入的分组数据)
亦即T
值,T
的定义参考后续说明

F
、G
、H
、I
的计算流程程类似,可参考下图实现流程

g
为运算函数,
亦即F
、G
、H
、I
,而CLSs
为左移s
为,s
在每步中是可以变化的,具体g
函数的功能如下

Output
输出结果ABCD
,A
为低位,D
为高位。
SHA
算法了解
SHA
是Secure Hash Algorithm
的缩写,SHA
和MD5
的差别主要在信息摘要长度、Hash
算法等方面,下图为SHA-1 160
比特的Hash
压缩过程

SHA
有几种类型,下图有一些简单的比较

HMAC
了解
MAC
为Message Authentication Codes
的简写,亦即生成消息认证的校验内容,HMAC
为Keyed-Hash Message Authentication Code
的缩写。操作方式MAC(text) = HMAC(K, text) = H((K0
⊕ opad )|| H((K0
⊕ ipad) || text))

处理流程如下,其中k
其实是K0,B
为字节个数,ipad
为0x36
重复B
次,opad
为0x5c
重复B
次。初始K
值长度需要和B
作比较产生出K0
。

数字签名流程
