|
MD5算法说明 1、MD5算法是对输入的数据进行补位。使得如果数据位长度LEN对512求余的结果是448。即数据圹展至K*512+448位。即K*64+56个字节,K为整数。具体补位操作: 补一个1 然后补0至满足上述要求
2、补数据长度
用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时数据就被填成长度为512位的倍数。
3、初始化MD5参数
四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字A=0X01234567 B=0X89abcdef c=0Xfedcba98 D=0X76543210 4、处理位操作函数 X。Y。Z为32位整数
F(X.Y.Z) = XYINOT[X] g(X.y.z) = XZIY?[Z] h(x.y.z) = X xor Y xor Z I(X.Y.Z) = X xor (XInot(z))
5、主要变换过程: 使用常数组T[1......64].T[i]为32位整数用6进制表示.数据用16个32位的整数数组M[]表示.
具体过程如下:
/*处理数据原文*/
For i = 0 to N /16-1 DO
/*每一次 把数据原文存在16个元素的数组X中。*/
For i=0 to 15 do set X[i] to M[i*16+J]
END /结束对J的循环 /* SAVE A AS AA,B AS BB,C AS CC,AND D AS DD。*/
AA=A BB=B CC=C DD=D
/*第1轮*/ /* 以[ABCD K S I]表示如下操作
A=B+((a+F(b,c,d)+X[k]+T[i])<<<s).*/ /* do the following 16 operations.*/
[abcd 0 7 1][dabc 1 12 2][CDAB 2 17 3][BCDA 3 22 4] [abcd 4 7 5][dabc 5 12 6][CDAB 6 17 7][BCDA 7 22 8] [ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12] [ABCD 12 7 13][DABC 13 12 14][[CDAB 14 17 15][BCDA 15 22 16]
/*第2轮****/
/* 以[ABCD K S I]表示如下操作
A =B+(((A+G(B,C,D)+[K]+t[i]<<<S).*/
/* do THE FOLLWING 16 OPERATIONS.*/
[abcd 1 5 17][DABc 6 9 18[cdab 11 14 19][bcda 0 20 20] [abcd 5 5 21][dabc 10 9 22][CDAB 15 14 23][BCDA 4 20 24] [ABCD 9 5 25][DABC 14 9 26][CDAB3 14 27][BCDA 4 20 24] [ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]
第三轮*/
/*[ABCD K S I] A=B+((A+h(B,C,D)x[K]+T[I]<<<S)
[abcd 5 4 33][dabc 8 11 34][cdab 11 16 35][bcda 14 23 36] [abcd 1 4 37][dabc 4 11 38][cdab 7 16 39][bcda 10 23 40] [abcd 13 4 41][dabc 0 11 42][cdab 3 16 43][bcda 6 23 44] [avcd 9 4 45][dabc 12 11 46][cdab 15 16 47][bcda 2 25 48]
下来就是四了
A=A+AA B=B+BB C=C+CC D=D+DD END结束对i的循环
下来加密就结束了~输出的结果就是我们看不清楚的16位加密了 下来大家可以用这个试试~ <% ''''''''********************************************md5算法开始****************************************
上一篇:COM 组件设计与应用之数据类型
下一篇:搭建Ruby on Rails开发环境
|