MD5算法程序

标 题: MD5算法程序
作 者: 非安全
时 间: 2007-11-15
链 接: http://bbs1.pediy.com/showthread.php?t=54926

一个还算完美的程序,主程序代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
;  Programmed by nohacks, nohacks@163.com
;  Website: http://hi.baidu.com/nohacks
;           Win32 ASM is Masm
;  版本信息
;  WinMD5 for ASM V1.0   - 可以取得文本或文件的MD5值
;
;                         2007年11月15日
 
 
.386
.model  flat,  stdcall
option  casemap  :none
 
include    windows.inc
include    user32.inc
include    kernel32.inc
includelib  user32.lib
includelib  kernel32.lib
include    comdlg32.inc
includelib  comdlg32.lib
include          debug.inc
include        Stdlib.Inc
includelib  Stdlib.lib
 
m2m  Macro M1,M2
push  M2
pop    M1
endm
 
.const
ICO_ICO                EQU             1
DLG_MAIN    EQU    1000
IDC_EDT_IN             EQU             1001
IDC_EDT_OUT            EQU             1002
IDC_BTN_TXT            EQU             1003
IDC_BTN_FILE           EQU             1004
IDC_PGB                EQU             1005
.data?
hWinMain    dd    ?
hInstance    dd    ?
hMenu HANDLE dword ?
TheThread DWORD ?
 
.data
FilterString   BYTE   "全部文件(*.*)",0,"*.*",0,0
temp              db      '%s',0DH,0AH,0
szReceive         db       '文件名:%s',0dh,0ah
db       'MD5值 :%s',0dh,0ah,0
TEMP db '.',0
 
include    md5.asm
 
_OpenFileDlg  Proc _hWnd,_lpName,_nMax
LOCAL  @OFN:OPENFILENAME                           ;设置打开文件对话框
 
invoke  RtlZeroMemory,_lpName,_nMax                 ;数据清零
invoke  RtlZeroMemory,addr @OFN,SizeOf @OFN         ;同上
mov    @OFN.lStructSize,SizeOf @OFN
mov    @OFN.lpstrFilter,offset FilterString
m2m    @OFN.hwndOwner,_hWnd
m2m    @OFN.lpstrFile,_lpName
m2m    @OFN.nMaxFile,_nMax
mov    @OFN.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
mov             @OFN.lpstrInitialDir,offset TEMP
invoke  GetOpenFileName,addr @OFN                      ;调用打开文件对话框
ret
_OpenFileDlg endp
 
 
_SetWindowCenter proc _hWnd:DWORD
LOCAL swidth,sheight,dwidth,dheight
LOCAL rect:RECT
invoke GetSystemMetrics,SM_CXSCREEN
mov swidth,eax
invoke GetSystemMetrics,SM_CYSCREEN  ;取屏幕分辨率
mov sheight,eax
invoke GetWindowRect,_hWnd,addr  rect   ;取本程序窗口尺寸
mov eax,rect.right                      ;下面几行计算并设置屏幕中心位置
sub eax,rect.left
mov dwidth,eax
sub swidth,eax
mov eax,rect.bottom
sub eax,rect.top
mov dheight,eax
sub sheight,eax
shr sheight,1
shr swidth,1
 
invoke SetWindowPos,_hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW ;设置窗口位置
ret
_SetWindowCenter endp
 
;********************************************************************
CloseMapFile PROC hMapFile:DWORD,hFileRead:DWORD
invoke CloseHandle,hMapFile
; mov    hMapFile,0
invoke CloseHandle,hFileRead
ret
CloseMapFile endp
 
GetMd5Thread PROC H:DWORD
 
LOCAL   @Text[MAX_PATH]:BYTE
LOCAL   @FileText[MAX_PATH]:BYTE
LOCAL   @TEMP[MAX_PATH]:BYTE
LOCAL  @hFileRead,@hMapFile,@pMemory
invoke  _OpenFileDlg,hWinMain,addr @Text,MAX_PATH             ;调用打开文件对话框
.if eax==0
ret
.endif
invoke  SetDlgItemText,hWinMain,IDC_EDT_IN,addr @Text ;输出文件路径到编辑框
invoke ExtractFileName,addr @Text,addr @FileText  ;取短文件名
 
invoke CreateFile,ADDR @Text,\
GENERIC_READ ,\
0,\
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
NULL
.if eax==0
 
invoke MessageBox,0,CTEXT("打开文件失败!"),CTEXT("错误"),MB_OK
ret
.endif
 
mov    @hFileRead,eax
invoke CreateFileMapping,@hFileRead,NULL,PAGE_READONLY,0,0,NULL  ;创建映射文件
 
mov @hMapFile,eax
 
invoke MapViewOfFile,@hMapFile,FILE_MAP_READ,0,0,0   ;复制到本进程空间
 
mov @pMemory,eax
invoke  SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,1,0      ;进度条开始
invoke  GetFileSize,@hFileRead,0
invoke   _MD5,@pMemory,eax
invoke wsprintf ,addr  @TEMP,addr  szReceive, addr @FileText,eax  ; 连接文本 串
;invoke  SendDlgItemMessage,hWinMain,IDC_EDT_OUT,EM_SETSEL,-1,0  ;选择文本
invoke  SendDlgItemMessage,hWinMain,IDC_EDT_OUT,EM_REPLACESEL,0,addr @TEMP ;输出到编辑框
invoke  SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,100,0   ;进度条结束
invoke UnmapViewOfFile,@pMemory                             ;关闭映射
invoke CloseMapFile,@hMapFile,@hFileRead                    ;关闭打开文件
 
ret
 
GetMd5Thread endp
 
_ProcDlgMain  proc  uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
 
local   @Text[MAX_PATH]:BYTE
local   @Temp[MAX_PATH]:BYTE
LOCAL  @hMem,@hFile,@Size,@Read
mov  eax,wMsg
 
cmp  eax,WM_COMMAND
je  GetMd5
cmp  eax,WM_INITDIALOG
je  boxStart
cmp  eax,WM_CLOSE
je  boxClose
 
retFalse:
mov  eax,FALSE
ret
 
boxClose:
 
invoke  EndDialog,hWnd,NULL
jmp  retTrue
 
boxStart:
 
push  hWnd
pop  hWinMain
invoke LoadIcon,hInstance,ICO_ICO
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax    ;设置窗口图标
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ;窗口置顶
INVOKE _SetWindowCenter,hWinMain     ;使窗体出现在屏幕中心
jmp  retTrue
 
GetMd5:
mov     eax,wParam
.if   eax==IDC_BTN_TXT
invoke SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,1,0     ;进度条开始
invoke  GetDlgItemText,hWnd, IDC_EDT_IN,addr @Text,MAX_PATH   ;取用户输入
invoke  _MD5,addr @Text,eax                         ;MD5转换
invoke  wsprintf,addr  @Temp,addr  temp,eax      ;连接文本开始
invoke  SendDlgItemMessage,hWnd,IDC_EDT_OUT,EM_REPLACESEL,0,addr @Temp ;输出到编辑框
invoke  SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,100,0    ;进度条结束
.elseif   eax==IDC_BTN_FILE
invoke CreateThread,NULL,0,addr  GetMd5Thread,0,0,0        ;创建线程
.endif
 
retTrue:
mov  eax,TRUE
ret
_ProcDlgMain  endp
 
Start:
invoke  GetModuleHandle,NULL
mov    hInstance,eax
invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,_ProcDlgMain,0
invoke  ExitProcess,NULL
End  Start

==========================================

开发环境:MASM+RadASM
系统:Windows XP +SP2

  Md5Win.rar (15.5 KiB, 192 hits)

发表评论





XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>