1 / 13
文档名称:

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

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

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

分享

预览

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

上传人:sssmppp 2020/9/2 文件大小:132 KB

下载得到文件列表

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

文档介绍

文档介绍:—、补位二、 补数据长度三、 初始化MD5参数四、 处理位操作两数五、 主要变换过程六、 输出结果补位:MD5算法先対输入的数据进行补位,使得数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即KF4+56个字节,K为整数。具体补位操作:补一个1,然后补0至满足上述要求。补数据长度:用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。初始化MD5参数:四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字A=OXO1234567B=0X89abcdefC=0Xfcdcba98D=0X76543210处理位操作函数:X,Y,Z为32位整数。F(X,Y,Z)=X&YINOT(X)&ZG(X,Y,Z)=X&ZIY?(Z)H(X,Y,Z)=XxorYxorZI(X,Y,Z)=Yxor(Xlnot(Z))主要变换过程:使用常数组TH...64],T[i]为32位整数用16进制表示,数据用16个32位的整数数组M[]表示。具体过程如下:Fori=0toN/16-ldoForj=0to15doSctX[j]toM[i*16+j].end/结束对J的循环AA=ABB=BCC=CDD=D[ABCD071][DABCI122][CDAB2173][BCDA3224][ABCD475][DABC5126][CDAB6177][BCDA7228][ABCD879][DABC91210][CDAB1017II][BCDA112212][ABCD12713][DABC131214][CDAB141715][BCDA152216][ABCD1517][DABC6918][CDAB111419][BCDA02020][ABCD5521][DABC10922][CDAB151423][BCDA42024][ABCD9525][DABC14926][CDAB31427][BCDA82028J[ABCD13529][DABC2930][CDAB71431][BCDA122032][ABCD5433][DABC81134][CDAB111635][BCDA142336][ABCD1437][DABC41138][CDAB71639][BCDA102340][ABCD13441][DABCOII42][CDAB31643][BCDA62344|[ABCD9445][DABC121146][CDAB151647][BCDA22348][ABCD0649][DABC71050][CDAB141551][BCDA52152][ABCD12653][DABC31054][CDAB101555][BCDA12156][ABCD8657][DABC151058][CDAB61559][BCDA132160J[ABCD4661][DABC111062][CDAB21563][BCDA92164]A=A+AAB=B+BBc=D=D+DD输出结果。{unitUnit2;,另外还附有源代码:MD5加密算法(DELPHI)}unitUnit2;// INTERFACEusesWindows;typeMD5Count=array[O..l]ofDWORD;MD5State=array[0..3JofDWORD;MD5Block=array[().」5]ofDWORD;MD5CBits=array[0..7Jofbyte;MD5Digest=array[O..l5]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);functionMD5String(M:string):MD5Digest;functionMD5File(N:string):MD5Digest;functionMD5Print(D:MD5Digest):string;functionMD5Match(Dl,D2:MD5Digest):boolean;// IMPLEMENTATION//varPADDING:MD5Buffer=($80,$00