Пытаюсь разобраться с сабжем. Почему-то когда я читаю файл и передаю его CryptHashData, у меня мд5 хеш считается, но он получается всегда разный... Причем как выяснилось дело именно в чтении из файла, так как если натравить ф-ю CryptHashData на заранее приготовленный массив, то результат получается всегда одинаковый. Как я только не пробовал читать файл, все равно одна и та же борода...
Подскажите пожалуйста в чем может быть проблема.
на всякий случай приведу код, с помощью которого пытаюсь посчитать мд5 хеш файла.
- Код: Выделить всё
Dim bResult As Boolean, hProv As Long, hHash As Long, dwHashLen As String, HashResult As String
Dim mes As String
Dim hFile As Long, hSize As Long, farray As Long, bread As Long
hFile = CreateFile("C:\project1.bat", GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
hSize = GetFileSize(hFile, 0)
farray = LocalAlloc(LMEM_ZEROINIT, hSize)
bResult = ReadFile(hFile, ByVal farray, hSize, bread, ByVal 0&)
bResult = CryptAcquireContext(hProv, ByVal vbNullChar, ByVal vbNullChar, PROV_RSA_FULL, 0)
bResult = CryptCreateHash(hProv, CALG_MD5, 0, 0, hHash)
bResult = CryptHashData(hHash, ByVal farray, ByVal hSize, 0)
HashResult = String(16, Chr(0))
bResult = CryptGetHashParam(hHash, HP_HASHVAL, HashResult, 16, 0)
For i = 1 To 16
mes = mes + Hex(Asc(Mid(HashResult, i, 1)))
Next
MsgBox mes
Clipboard.SetText mes
bResult = CryptDestroyHash(hHash)
bResult = CryptReleaseContext(hProv, 0)
LocalFree farray
Да, и ещё. Хочу реализовать расчет мд5 хеша именно при помощи криптоапи. Без использования сторонних длл. А класс, который выложен на этом сайте меня не устраивает, так как там слишком медленно выполняется расчет (у меня например файл Winword.exe - размер чуть больше 10 мб обсчитывается около 10 секунд).