| Option Public |
| |
| Option Declare |
| Private Const MD5_BUF_SIZE = 16384 |
| |
| Private Type MD5_CTX |
| i (1 To 2) As Long |
| buf (1 To 4) As Long |
| inp (1 To 64) As Byte |
| digest (1 To 16) As Byte |
| End Type |
| |
| Private Type MD5_BUFFER |
| buffer (1 To MD5_BUF_SIZE) As Byte |
| End Type |
| |
| Declare Private Function w32_CreateFile Lib "kernel32.dll" Alias "CreateFileA" ( _ |
| Byval lpFileName As Lmbcs String, _ |
| Byval dwDesiredAccess As Long, _ |
| Byval dwShareMode As Long, _ |
| Byval lpSecurityAttributes As Long, _ |
| Byval dwCreationDisposition As Long, _ |
| Byval dwFlagsAndAttributes As Long, _ |
| Byval hTemplateFile) As Long |
| |
| Declare Private Function w32_ReadFile Lib "kernel32.dll" Alias "ReadFile" (Byval hFile As Long, buffer As MD5_BUFFER, Byval toRead As Long, readBytes As Long, Byval overlap As Long) As Long |
| Declare Private Function w32_CloseHandle Lib "kernel32.dll" Alias "CloseHandle" (Byval hFile As Long) As Integer |
| |
| Declare Private Sub w32_MD5Init Lib "advapi32.dll" Alias "MD5Init" (Context As MD5_CTX) |
| Declare Private Sub w32_MD5Update Lib "advapi32.dll" Alias "MD5Update" (Context As MD5_CTX, buffer As MD5_BUFFER, Byval lLen As Long) |
| Declare Private Sub w32_MD5Final Lib "advapi32.dll" Alias "MD5Final" (Context As MD5_CTX) |
| |
| Public Function MD5ofFile(fileName As String) As String |
| Dim hFile As Long |
| Dim buffer As MD5_BUFFER |
| Dim readBytes As Long |
| Dim ctx As MD5_CTX |
| |
| hFile = w32_CreateFile(fileName, _ |
| &H80000000, _ |
| 1, _ |
| 0, _ |
| 3, _ |
| &H80, _ |
| 0) |
| |
| If hFile = -1 Then |
| Error 10, "Unable to open " + fileName |
| End If |
| |
| Call w32_MD5init(ctx) |
| Do While w32_readFile(hFile, buffer, MD5_BUF_SIZE, readBytes, 0) |
| If readBytes = 0 Then Exit Do |
| Call w32_MD5update(ctx, buffer, readBytes) |
| Loop |
| Call w32_MD5final(ctx) |
| w32_CloseHandle(hFile) |
| Dim i%, ret$ |
| For i = 1 To 16 |
| ret = ret + Right("0" + Hex(ctx.digest(i)),2) |
| Next |
| MD5ofFile = Lcase(ret) |
| |
| End Function |