| 查看: 433 | 回复: 0 | |||
| 当前主题已经存档。 | |||
sdlj8051金虫 (著名写手)
|
[交流]
MD5算法汇编代码[着重优化]
|
||
|
MD5算发的汇编实现 并简单的优化 将原来的几个简单点的函数用几条命令代理了~~ 将有些的重复代码 使用了循环 使程序看起来不是那么长了 :) 抛砖引玉 我总觉的M5D的算发可以用汇编很简单的实现 希望高手们不吝赐教 原因是 @b1-@a=0EFCDAB89H-67452301H=88888888H @c -@d=098BADCFEH-10325476H=88888888H ;************************************************* MAND Macro M1,M2 mov eax,M1 and eax,M2 EXITM ENDM MXOR Macro M1,M2 mov eax,M1 xor eax,M2 EXITM endm MADD Macro M1,M2 mov eax,M1 add eax,M2 EXITM ENDM SWAP Macro M1,M2 push M1 push M2 pop M1 pop M2 endm Mcopy MACRO lpSource,lpDest,len mov esi, lpSource mov edi, lpDest mov ecx, len rep movsb ENDM WordToHex MACRO _lValue mov eax,_lValue xchg al,ah rol eax,16 xchg al,ah EXITM ENDM .const .data? stMd5Hex DB 33 DUP (?) .data szData_SS DWORD 7,12,17,22 DWORD 5,9,14,20 DWORD 4,11,16,23 DWORD 6,10,15,21 stData_FF DWORD 0D76AA478H,0E8C7B756H,0242070DBH,0C1BDCEEEH DWORD 0F57C0FAFH,04787C62AH,0A8304613H,0FD469501H DWORD 0698098D8H,08B44F7AFH,0FFFF5BB1H,0895CD7BEH DWORD 06B901122H,0FD987193H,0A679438EH,049B40821H stData_GG DWORD 0F61E2562H,0C040B340H,0265E5A51H,0E9B6C7AAH DWORD 0D62F105DH,002441453H,0D8A1E681H,0E7D3FBC8H DWORD 021E1CDE6H,0C33707D6H,0F4D50D87H,0455A14EDH DWORD 0A9E3E905H,0FCEFA3F8H,0676F02D9H,08D2A4C8AH stData_HH DWORD 0FFFA3942H,08771F681H,06D9D6122H,0FDE5380CH DWORD 0A4BEEA44H,04BDECFA9H,0F6BB4B60H,0BEBFBC70H DWORD 0289B7EC6H,0EAA127FAH,0D4EF3085H,004881D05H DWORD 0D9D4D039H,0E6DB99E5H,01FA27CF8H,0C4AC5665H stData_II DWORD 0F4292244H,0432AFF97H,0AB9423A7H,0FC93A039H DWORD 0655B59C3H,08F0CCC92H,0FFEFF47DH,085845DD1H DWORD 06FA87E4FH,0FE2CE6E0H,0A3014314H,04E0811A1H DWORD 0F7537E82H,0BD3AF235H,02AD7D2BBH,0EB86D391H .code _md5_FF Proc uses ecx _a, _b, _c, _d, _x, _s, _ac mov eax,_b and eax,_c mov ecx,_b not ecx and ecx,_d or eax,ecx add eax,_a add eax,_x add eax,_ac mov ecx,_s rol eax,cl add eax,_b ret _md5_FF endp _md5_GG Proc uses ecx _a,_b,_c,_d,_x,_s,_ac mov eax,_b and eax,_d mov ecx,_d not ecx and ecx,_c or eax,ecx add eax,_a add eax,_x add eax,_ac mov ecx,_s rol eax,cl add eax,_b ret _md5_GG EndP _md5_HH Proc uses ecx _a,_b,_c,_d,_x,_s,_ac mov eax,_b xor eax,_c xor eax,_d add eax,_a add eax,_x add eax,_ac mov ecx,_s rol eax,cl add eax,_b ret _md5_HH EndP _md5_II Proc uses ecx _a,_b,_c,_d,_x,_s,_ac mov eax,_d not eax or eax,_b xor eax,_c add eax,_a add eax,_x add eax,_ac mov ecx,_s rol eax,cl add eax,_b ret _md5_II EndP _ConvertToWordArray Proc uses edi esi ecx _lpData,_dwLen LOCAL @lWordArray,@lNumberOfWords mov eax,_dwLen add eax,8 shr eax,6 inc eax shl eax,4 dec eax shl eax,2 mov @lNumberOfWords,eax invoke VirtualAlloc,NULL,@lNumberOfWords,MEM_COMMIT,PAGE_READWRITE mov @lWordArray,eax mov edi,eax invoke RtlZeroMemory,@lWordArray,@lNumberOfWords mov esi,_lpData Mcopy _lpData,@lWordArray,_dwLen mov eax,128 stosd mov edi,@lWordArray mov ecx,@lNumberOfWords shr ecx,2 mov eax,_dwLen shr eax,29 mov DWORD PTR [edi+ecx*4],eax dec ecx mov eax,_dwLen shl eax,3 mov DWORD PTR [edi+ecx*4],eax mov eax,@lWordArray ret _ConvertToWordArray endp ;############################################### ; 主程序 ; _lpData 需要加密的数据指针 ; _dwLen 需要加密的数据长度 ; 返回值 MD5文本指针 ;############################################### _Md5 Proc uses edi ebx ecx edx _lpData,_dwLen LOCAL @a,@b1,@c,@d LOCAL @AA,@BB,@CC,@DD LOCAL @lNumber invoke _ConvertToWordArray,_lpData,_dwLen mov edi,eax mov @a,67452301H mov @b1,0EFCDAB89H mov @c,98BADCFEH mov @d,10325476H mov eax,_dwLen add eax,8 shr eax,6 inc eax shl eax,4 dec eax mov @lNumber,eax xor ebx,ebx .While ebx<=@lNumber push @a pop @AA push @b1 pop @BB push @c pop @CC push @d pop @DD push ebx push edi lea ebx,[ebx*4] add edi,ebx xor ebx,ebx .While ebx<16 mov ecx,ebx shl ecx,30 shr ecx,30 mov eax,[edi+ebx*4] invoke _md5_FF,@a,@b1,@c,@d,eax,szData_SS[ecx*4],stData_FF[ebx*4] mov @a,eax SWAP @a,@d SWAP @b1,@d SWAP @c,@d inc ebx .endw xor ebx,ebx mov edx,ebx inc dl .While ebx<16 mov ecx,ebx shl ecx,30 shr ecx,30 mov eax,[edi+edx*4] invoke _md5_GG,@a,@b1,@c,@d,eax,szData_SS[ecx*4+16],stData_GG[ebx*4] mov @a,eax SWAP @a,@d SWAP @b1,@d SWAP @c,@d add dl,5 shl dl,4 shr dl,4 inc ebx .endw xor ebx,ebx mov edx,5 .While ebx<16 mov ecx,ebx shl ecx,30 shr ecx,30 mov eax,[edi+edx*4] invoke _md5_HH,@a,@b1,@c,@d,eax,szData_SS[ecx*4+32],stData_HH[ebx*4] mov @a,eax SWAP @a,@d SWAP @b1,@d SWAP @c,@d add edx,3 shl dl,4 shr dl,4 inc ebx .endw xor ebx,ebx mov edx,ebx .While ebx<16 mov ecx,ebx shl ecx,30 shr ecx,30 mov eax,[edi+edx*4] invoke _md5_II,@a,@b1,@c,@d,eax,szData_SS[ecx*4+48],stData_II[ebx*4] mov @a,eax SWAP @a,@d SWAP @b1,@d SWAP @c,@d add edx,7 shl dl,4 shr dl,4 inc ebx .endw pop edi pop ebx mov @a,MADD(@a,@AA) mov @b1,MADD(@b1,@BB) mov @c,MADD(@c,@CC) mov @d,MADD(@d,@DD) add ebx,16 .EndW mov @a,WordToHex(@a) mov @b1,WordToHex(@b1) mov @c,WordToHex(@c) mov @d,WordToHex(@d) invoke wsprintf,addr stMd5Hex,SADD("%08x%08x%08x%08x" ,@a,@b1,@c,@dlea eax,stMd5Hex ret _Md5 endp ;************************************************* [ Last edited by 幻影无痕 on 2006-10-17 at 10:19 ] |
» 猜你喜欢
基金申报
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有7人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
Materials Today Chemistry审稿周期
已经有5人回复
溴的反应液脱色
已经有7人回复
推荐一本书
已经有12人回复
常年博士招收(双一流,工科)
已经有4人回复











,@a,@b1,@c,@d
回复此楼