1 / 13
文档名称:

MD5-加密算法以及原理-delphi版.docx

格式:docx   大小:23KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

MD5-加密算法以及原理-delphi版.docx

上传人:文库旗舰店 2020/4/23 文件大小:23 KB

下载得到文件列表

MD5-加密算法以及原理-delphi版.docx

文档介绍

文档介绍:、补位二、补数据长度三、初始化MD5参数四、处理位操作函数五、主要变换过程六、输出结果补位:MD5算法先对输入的数据进行补位,使得数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。具体补位操作:补一个1,然后补0至满足上述要求。补数据长度:用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。初始化MD5参数:四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字A=0X01234567B=0X89abcdefC=0Xfedcba98D=0X76543210处理位操作函数:X,Y,Z为32位整数。F(X,Y,Z)=X&Y|NOT(X)&ZG(X,Y,Z)=X&Z|Y?(Z)H(X,Y,Z)=XxorYxorZI(X,Y,Z)=Yxor(X|not(Z))主要变换过程:使用常数组T[1...64],T[i]为32位整数用16进制表示,数据用16个32位的整数数组M[]表示。具体过程如下:Fori=0toN/16-1doForj=0to15doSetX[j]toM[i*16+j].end/结束对J的循环AA=ABB=BCC=CDD=D[ABCD071][DABC1122][CDAB2173][BCDA3224][ABCD475][DABC5126][CDAB6177][BCDA7228][ABCD879][DABC91210][CDAB101711][BCDA112212][ABCD12713][DABC131214][CDAB141715][BCDA152216][ABCD1517][DABC6918][CDAB111419][BCDA02020][ABCD5521][DABC10922][CDAB151423][BCDA42024][ABCD9525][DABC14926][CDAB31427][BCDA82028][ABCD13529][DABC2930][CDAB71431][BCDA122032][ABCD5433][DABC81134][CDAB111635][BCDA142336][ABCD1437][DABC41138][CDAB71639][BCDA102340][ABCD13441][DABC01142][CDAB31643][BCDA62344][ABCD9445][DABC121146][CDAB151647][BCDA22348][ABCD0649][DABC71050][CDAB141551][BCDA52152][ABCD12653][DABC31054][CDAB101555][BCDA12156][ABCD8657][DABC151058][CDAB61559][BCDA132160][ABCD4661][DABC111062][CDAB21563][BCDA92164]A=A+AAB=B+BBC=D=D+DDend输出结果。  :  {unitUnit2;interfaceimplementationend. 具体使用方法如下,另外还附有源代码:MD5加密算法(DELPHI)}unitUnit2;//-----------------------------------------------------------------------------------------------INTERFACE//-----------------------------------------------------------------------------------------------usesWindows;typeMD5Count=array[0..1]ofDWORD;MD5State=array[0..3]ofDWORD;MD5Block=array[0..15]ofDWORD;MD5CBits=array[0..7]ofbyte;MD5Digest=array[0..15]ofbyte;MD5Buffer=array[0..63]ofbyte;MD5Context=recordState:MD5State;Count:MD5Count;Buffer:MD5Buffer;end;procedureMD5Init(varContext:MD5Context);procedureMD5Update(varContext:MD5Context;Input:pChar;Length:longword);procedureMD5Final(varContext:MD5Context;varDigest:MD5Digest