什么是摘要算法
摘要算法是通过一系列的计算方法和规则,将输入的任意长度的数据转化成固定长度的返回值,这个值被称为hash值(哈希值),而这种算法被称为摘要算法、哈希算法、散列算法。
主流的摘要算法
MD4、MD5:MD5生成128位固定长度的hash值,已经被破解
SHA-1:生成164位固定长度的hash值,已经被破解
SHA-2:生成224、256、384、512位的hash值
SHA-3:全新的算法和标准
备注:
从MD4-SHA-2,随着生成的长度的增加,碰撞成功的概率会减小,因为只能暴力枚举破解,所以破解的难度也就增大。比如128位的MD5,碰撞概率为2的128次方分之1,而512位则为2的512次方分之一。
摘要算法的大概原理
以MD5为例,MD5以512位对原数据进行分组加密,最后输出32个16进制,也就是32x4=128位,其加密的基本流程如下:
第一步:补位
元数据如果位数不满足Length=512xn+448,也就是512取余值为448,则对其补位使其满足规则。其意义是在MD5中,将元数据分为512位后分组进行加密(后面会讲到),其中会预留64位来表示数据的原始信息,比如原始长度等。所以Length=512xn+448,加上64位的预留信息之后:Total=Length+64=512x(n+1)。
第二步:设定初始值
摘要算法根据元数据长度按照512分为n组后,会对初始值进行n轮加密运算,每轮的计算方式和第一轮大同小异。所有轮数计算完毕后将变化后的4个初始值组合输出最终结果。官方实现中的4个初始值为:
A=0x01234567
B=0x89ABCDEF
C=0xFEDCBA98
D=0x76543210
如上所示,A、B、C、D都为8个16进制,一个16进制表示4位,所以一个初始值的位数就是8x4=32位,所以MD5最终输出的长度固定为32x4=128.
第三步:按照组数循环计算
算法的大概过程如下,大概就是对ABCD一顿猛如虎的操作演变成完全不同的ABCD

最低0.47元/天 解锁文章
1912

被折叠的 条评论
为什么被折叠?



