AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 数据结构

汇编版MD5 Hasher(win32 下的控制台程序)

51自学网 http://www.51zixue.net

原帖及讨论:http://bbs.bccn.net/thread-226811-1-1.html

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@sina.com  QQ:493165744
*/ 时间: 2008-8-4  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

偶用win32汇编写了个控制台下的MD5hasher 请各位指点 多拍板砖

把源码帖一下吧

主程序

;MASMPlus 代码模板 - 控制台程序
;********************************************************************************
;MD5 Hasher
;by zklhp    Email:zklhp@sina.com
;2008.8.4
;转载请保留完整
;********************************************************************************
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
;include gdi32.inc

;includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm
.data
    lpszDigest db 17d dup(0)
    lpszBuffer db 512d dup(0)
    lpszOut db 128d dup(0)

_MD5hash            proto    :DWORD,:DWORD,:DWORD

.CODE
    include md5.asm    ;参考多个版本的源代码编写 有一个不知道作者 在此一并表示感谢
START:

    invoke StdOut,CTXT('MD5 hasher',0dh,0ah)
    invoke StdOut,CTXT('by zklhp   Email:zklhp@sina.com',0dh,0ah)
    invoke GetCL,0,offset lpszBuffer
    invoke wsprintf,offset lpszOut,CTXT('Usage:%s 待加密字符串',0dh,0ah),offset lpszBuffer
    invoke StdOut,offset lpszOut
    invoke GetCL,1,offset lpszBuffer
    invoke wsprintf,offset lpszOut,CTXT('MD5("%s")='),offset lpszBuffer
    invoke StdOut,offset lpszOut
    invoke lstrlen,offset lpszBuffer
    invoke _MD5hash,offset lpszBuffer,eax,offset lpszDigest

    lea esi,lpszDigest
    xor ecx,ecx
    ;改变顺序 方便输出
    .while ecx < 4
    mov eax,[esi+ecx*4]
    xchg ah,al
    rol eax,16d
    xchg al,ah
    mov [esi+ecx*4],eax
    ;int 3h
    inc ecx
    .endw

    invoke wsprintf,offset lpszBuffer,CTXT('%08x%08x%08x%08x'),/
        DWORD ptr [esi],DWORD ptr [esi+4h],DWORD ptr [esi+8h],DWORD ptr [esi+0ch]

    invoke StdOut,offset lpszBuffer

    ;暂停显示,回车键关闭
    invoke StdIn,offset lpszBuffer,sizeof lpszBuffer
    invoke ExitProcess,0
    
end START

md5.asm

.code

_MD5hash proc    uses ebx edi esi,_lpBuffer:DWORD,_dwBufferLength:DWORD,_lpMD5Result:DWORD
    local    @dwA:DWORD,@dwB:DWORD,@dwC:DWORD,@dwD:DWORD
    local @lpBuf:DWORD

    mov    ecx, _dwBufferLength
    add    ecx, 128d    ;分配足够大的  保证够用
    invoke    GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,ecx    ;貌似这样和平台相关
    .if    eax
        mov    @lpBuf, eax
    .else
        dec    eax    ;出错返回 -1
        ret
    .endif
    ;int    3h
    mov    edi, eax
    mov    esi, _lpBuffer
    mov    ecx, _dwBufferLength
    shr    ecx, 2
    rep    movsd
    mov    ecx, _dwBufferLength
    and    ecx, 11b
    rep    movsb

    mov    edi, eax
    mov    eax, _dwBufferLength
    inc    eax
    add    edi, eax
    mov    BYTE ptr [edi-1], 080h
    mov    edx, eax
    and    edx, 111111b
    neg    edx
    add    edx, 40h
    cmp    edx, 8h
    jae    @f
    add    edx, 40h
@@:
    mov    ecx, edx
    shr    ecx, 2
    xor    eax, eax
    rep    stosd
    mov    ecx, edx
    and    ecx, 11b
    rep    stosb
    mov    eax, _dwBufferLength
    inc    edx
    add    _dwBufferLength, edx
    xor    edx, edx
    shl    eax,3
    mov    DWORD  ptr [edi-8], eax
    mov    DWORD  ptr [edi-4], edx
    mov    edi, @lpBuf
    mov    eax, 067452301h
    mov    ebx, 0efcdab89h
    mov    ecx, 098badcfeh
    mov    edx, 010325476h

hashloop:

    mov    @dwA, eax
    mov    @dwB, ebx
    mov    @dwC, ecx
    mov    @dwD, edx

    push    ebp
    mov    esi, ebx
    and    esi, ecx
    mov    ebp, ebx
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0D76AA478H]
    add    esi, DWORD ptr ds:[edi]
    rol    esi, 7
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ebx
    mov    ebp, eax
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+0E8C7B756H]
    add    esi, DWORD ptr ds:[edi+4H]
    rol    esi, 0CH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, eax
    mov    ebp, edx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0242070DBH]
    add    esi, DWORD ptr ds:[edi+8H]
    rol    esi, 11H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, edx
    mov    ebp, ecx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+0C1BDCEEEH]
    add    esi, DWORD ptr ds:[edi+0CH]
    rol    esi, 16H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, ecx
    mov    ebp, ebx
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0F57C0FAFH]
    add    esi, DWORD ptr ds:[edi+10H]
    rol    esi, 7H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ebx
    mov    ebp, eax
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+04787C62AH]
    add    esi, DWORD ptr ds:[edi+14H]
    rol    esi, 0CH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, eax
    mov    ebp, edx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0A8304613H]
    add    esi, DWORD ptr ds:[edi+18H]
    rol    esi, 11H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, edx
    mov    ebp, ecx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+0FD469501H]
    add    esi, DWORD ptr ds:[edi+1CH]
    rol    esi, 16H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, ecx
    mov    ebp, ebx
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0698098D8H]
    add    esi, DWORD ptr ds:[edi+20H]
    rol    esi, 7
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ebx
    mov    ebp, eax
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+8B44F7AFH]
    add    esi, DWORD ptr ds:[edi+24H]
    rol    esi, 0CH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, eax
    mov    ebp, edx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0FFFF5BB1H]
    add    esi, DWORD ptr ds:[edi+28H]
    rol    esi, 11H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, edx
    mov    ebp, ecx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+895CD7BEH]
    add    esi, DWORD ptr ds:[edi+2CH]
    rol    esi, 16H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, ecx
    mov    ebp, ebx
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+06B901122H]
    add    esi, DWORD ptr ds:[edi+30H]
    rol    esi, 7H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ebx
    mov    ebp, eax
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+0FD987193H]
    add    esi, DWORD ptr ds:[edi+34H]
    rol    esi, 0CH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, eax
    mov    ebp, edx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0A679438EH]
    add    esi, DWORD ptr ds:[edi+38H]
    rol    esi, 11H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, edx
    mov    ebp, ecx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+049B40821H]
    add    esi, DWORD ptr ds:[edi+3CH]
    rol    esi, 16H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, edx
    mov    ebp, edx
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0F61E2562H]
    add    esi, DWORD ptr ds:[edi+4H]
    rol    esi, 5H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ecx
    mov    ebp, ecx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+0C040B340H]
    add    esi, DWORD ptr ds:[edi+18H]
    rol    esi, 9H
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, ebx
    mov    ebp, ebx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0265E5A51H]
    add    esi, DWORD ptr ds:[edi+2CH]
    rol    esi, 0EH
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, eax
    mov    ebp, eax
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+0E9B6C7AAH]
    add    esi, DWORD ptr ds:[edi]
    rol    esi, 14H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, edx
    mov    ebp, edx
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0D62F105DH]
    add    esi, DWORD ptr ds:[edi+14H]
    rol    esi, 5
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ecx
    mov    ebp, ecx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+02441453H]
    add    esi, DWORD ptr ds:[edi+28H]
    rol    esi, 9H
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, ebx
    mov    ebp, ebx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0D8A1E681H]
    add    esi, DWORD ptr ds:[edi+3CH]
    rol    esi, 0EH
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, eax
    mov    ebp, eax
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+0E7D3FBC8H]
    add    esi, DWORD ptr ds:[edi+10H]
    rol    esi, 14H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, edx
    mov    ebp, edx
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+21E1CDE6H]
    add    esi, DWORD ptr ds:[edi+24H]
    rol    esi, 5H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ecx
    mov    ebp, ecx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+0C33707D6H]
    add    esi, DWORD ptr ds:[edi+38H]
    rol    esi, 9H
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, ebx
    mov    ebp, ebx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+0F4D50D87H]
    add    esi, DWORD ptr ds:[edi+0CH]
    rol    esi, 0EH
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, eax
    mov    ebp, eax
    not    ebp
    and    ebp, edx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+455A14EDH]
    add    esi, DWORD ptr ds:[edi+20H]
    rol    esi, 14H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    and    esi, edx
    mov    ebp, edx
    not    ebp
    and    ebp, ecx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[eax+esi+0A9E3E905H]
    add    esi, DWORD ptr ds:[edi+34H]
    rol    esi, 5H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    and    esi, ecx
    mov    ebp, ecx
    not    ebp
    and    ebp, ebx
    or        esi, ebp
    lea    esi, DWORD ptr ds:[edx+esi+0FCEFA3F8H]
    add    esi, DWORD ptr ds:[edi+8H]
    rol    esi, 9H
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    and    esi, ebx
    mov    ebp, ebx
    not    ebp
    and    ebp, eax
    or        esi, ebp
    lea    esi, DWORD ptr ds:[ecx+esi+676F02D9H]
    add    esi, DWORD ptr ds:[edi+1CH]
    rol    esi, 0EH
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    and    esi, eax
    mov    ebp, eax
    not    ebp
    and    ebp, edx
    or    esi, ebp
    lea    esi, DWORD ptr ds:[ebx+esi+8D2A4C8AH]
    add    esi, DWORD ptr ds:[edi+30H]
    rol    esi, 14H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    xor    esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[eax+esi+0FFFA3942H]
    add    esi, DWORD ptr ds:[edi+14H]
    rol    esi, 4
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    xor    esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[edx+esi+8771F681H]
    add    esi, DWORD ptr ds:[edi+20H]
    rol    esi, 0BH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    xor    esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[ecx+esi+6D9D6122H]
    add    esi, DWORD ptr ds:[edi+2CH]
    rol    esi, 10H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    xor    esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ebx+esi+0FDE5380CH]
    add    esi, DWORD ptr ds:[edi+38H]
    rol    esi, 17H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    xor    esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[eax+esi+0A4BEEA44H]
    add    esi, DWORD ptr ds:[edi+4H]
    rol    esi, 4
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    xor    esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[edx+esi+04BDECFA9H]
    add    esi, DWORD ptr ds:[edi+10H]
    rol    esi, 0BH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    xor    esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[ecx+esi+0F6BB4B60H]
    add    esi, DWORD ptr ds:[edi+1CH]
    rol    esi, 10H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    xor    esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ebx+esi+0BEBFBC70H]
    add    esi, DWORD ptr ds:[edi+28H]
    rol    esi, 17H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    xor    esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[eax+esi+289B7EC6H]
    add    esi, DWORD ptr ds:[edi+34H]
    rol    esi, 4H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    xor    esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[edx+esi+0EAA127FAH]
    add    esi, DWORD ptr ds:[edi]
    rol    esi, 0BH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    xor    esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[ecx+esi+0D4EF3085H]
    add    esi, DWORD ptr ds:[edi+0CH]
    rol    esi, 10H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    xor    esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ebx+esi+4881D05H]
    add    esi, DWORD ptr ds:[edi+18H]
    rol    esi, 17H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, ebx
    xor    esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[eax+esi+0D9D4D039H]
    add    esi, DWORD ptr ds:[edi+24H]
    rol    esi, 4H
    add    esi, ebx
    mov    eax, esi
    mov    esi, eax
    xor    esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[edx+esi+0E6DB99E5H]
    add    esi, DWORD ptr ds:[edi+30H]
    rol    esi, 0BH
    add    esi, eax
    mov    edx, esi
    mov    esi, edx
    xor    esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[ecx+esi+1FA27CF8H]
    add    esi, DWORD ptr ds:[edi+3CH]
    rol    esi, 10H
    add    esi, edx
    mov    ecx, esi
    mov    esi, ecx
    xor    esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ebx+esi+0C4AC5665H]
    add    esi, DWORD ptr ds:[edi+8]
    rol    esi, 17H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, edx
    not    esi
    or        esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[eax+esi+0F4292244H]
    add    esi, DWORD ptr ds:[edi]
    rol    esi, 6H
    add    esi, ebx
    mov    eax, esi
    mov    esi, ecx
    not    esi
    or        esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[edx+esi+432AFF97H]
    add    esi, DWORD ptr ds:[edi+1CH]
    rol    esi, 0AH
    add    esi, eax
    mov    edx, esi
    mov    esi, ebx
    not    esi
    or        esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ecx+esi+0AB9423A7H]
    add    esi, DWORD ptr ds:[edi+38H]
    rol    esi, 0FH
    add    esi, edx
    mov    ecx, esi
    mov    esi, eax
    not    esi
    or        esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[ebx+esi+0FC93A039H]
    add    esi, DWORD ptr ds:[edi+14H]
    rol    esi, 15H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, edx
    not    esi
    or        esi, ebx
    xor    esi, ecx
    lea    esi, DWORD    ptr ds:[eax+esi+655B59C3H]
    add    esi, DWORD    ptr ds:[edi+30H]
    rol    esi, 6H
    add    esi, ebx
    mov    eax, esi
    mov    esi, ecx
    not    esi
    or        esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[edx+esi+8F0CCC92H]
    add    esi, DWORD ptr ds:[edi+0CH]
    rol    esi, 0AH
    add    esi, eax
    mov    edx, esi
    mov    esi, ebx
    not    esi
    or        esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ecx+esi+0FFEFF47DH]
    add    esi, DWORD ptr ds:[edi+28H]
    rol    esi, 0FH
    add    esi, edx
    mov    ecx, esi
    mov    esi, eax
    not    esi
    or        esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[ebx+esi+85845DD1H]
    add    esi, DWORD ptr ds:[edi+4H]
    rol    esi, 15H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, edx
    not    esi
    or        esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[eax+esi+6FA87E4FH]
    add    esi, DWORD ptr ds:[edi+20H]
    rol    esi, 6H
    add    esi, ebx
    mov    eax, esi
    mov    esi, ecx
    not    esi
    or        esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[edx+esi+0FE2CE6E0H]
    add    esi, DWORD ptr ds:[edi+3CH]
    rol    esi, 0AH
    add    esi, eax
    mov    edx, esi
    mov    esi, ebx
    not    esi
    or        esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ecx+esi+0A3014314H]
    add    esi, DWORD ptr ds:[edi+18H]
    rol    esi, 0FH
    add    esi, edx
    mov    ecx, esi
    mov    esi, eax
    not    esi
    or        esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[ebx+esi+4E0811A1H]
    add    esi, DWORD ptr ds:[edi+34H]
    rol    esi, 15H
    add    esi, ecx
    mov    ebx, esi
    mov    esi, edx
    not    esi
    or        esi, ebx
    xor    esi, ecx
    lea    esi, DWORD ptr ds:[eax+esi+0F7537E82H]
    add    esi, DWORD ptr ds:[edi+10H]
    rol    esi, 6H
    add    esi, ebx
    mov    eax, esi
    mov    esi, ecx
    not    esi
    or        esi, eax
    xor    esi, ebx
    lea    esi, DWORD ptr ds:[edx+esi+0BD3AF235H]
    add    esi, DWORD ptr ds:[edi+2CH]
    rol    esi, 0AH
    add    esi, eax
    mov    edx, esi
    mov    esi, ebx
    not    esi
    or        esi, edx
    xor    esi, eax
    lea    esi, DWORD ptr ds:[ecx+esi+02AD7D2BBH]
    add    esi, DWORD ptr ds:[edi+8H]
    rol    esi, 0FH
    add    esi, edx
    mov    ecx, esi
    mov    esi, eax
    not    esi
    or        esi, ecx
    xor    esi, edx
    lea    esi, DWORD ptr ds:[ebx+esi+0EB86D391H]
    add    esi, DWORD ptr ds:[edi+24H]
    rol    esi, 15H
    add    esi, ecx
    mov    ebx, esi
    pop    ebp

    add    eax, @dwA
    add    ebx, @dwB
    add    ecx, @dwC
    add    edx, @dwD

    add    edi,40h
    sub    _dwBufferLength,40h
    jnz    hashloop
    ;int    3h
    mov    esi, _lpMD5Result
    mov    [esi], eax
    mov    [esi+4h], ebx
    mov    [esi+8h], ecx
    mov    [esi+0Ch], edx
    invoke GlobalFree, @lpBuf
    ret

_MD5hash            endp

感谢那些无私提供源码的前辈
程序+源码+参考资料已打包

md5hasher.rar

 

 

 
上一篇:Dijkstra最小路径  下一篇:线索二叉树算法