网络安全 频道

MD5算法基础

MD5产生一个128位的HASH值,在经过一写初始树立后,将明文分成了512位的块,再将每一块分成16个32位的子块。算法的输出是4个32位的块,连接起来构成128位的HASH值。
   
首先,将消息填充到比512的倍数少64位,填充时先向消息末尾填一个1,然后再填满0,然后后面再加上一个64位的消息长度的表示(不包括填充位)。这两步使消息长度恰好是512的倍数,同时保证不同消息在填充后仍不相同。
   
初始化4个32位变量:
    A=0x01234567
   
B=0x89abcdef
    C=0xfedcba98
   
D=0x76543210
这些变量成为链变量。
   
然后,开始算法的主循环。这个循环对消息中所有的块都执行一次。将4个变量复制到不同的变量:a值为A,b值为B,c值为C,d值为D。
   
主循环有4圈,都很相似。每圈使用一个不同的操作,重复16次。每个操作完成一个a,b,c和d中三个变量的非线性函数。然后,将结果与第四个变量、文本的一个子块和一个常数相加。然后,将结果混换左移一个可变值的位数,再将结果与a,b,c和d之一相加。最后用结果来代替a,b,c和d之一。
    共有4个非线性函数,每次操作使用一个,每圈都不相同。
   
F(X,Y,Z)=(X∧Y)∨((「X)∧Z)
   
G(X,Y,Z)=(X∧Z)∨(Y∧(「z))
   
H(X,Y,Z)=X㈩Y㈩Z
    I(X,Y,Z)=Y㈩(X∧(「z))
   
㈩为异或,∧为与,∨为或,「为非
   
如果Mi代表消息的第i个子块(0到15),而
0
相关文章