Мне нужна процедура VBA для вычисления хеша MD5 содержимого файла. Я нашел несколько примеров (например, here), но я обнаружил, что они разбились, когда имя файла содержит определенные символы Unicode, поэтому я пытаюсь настроить код, чтобы этого избежать.VBA вычислить хэш MD5 на содержимое файла
Этот код не приводит к ошибке, но также не возвращает правильный MD5-хэш. Что не так?
Public Function FileToMD5Hex(sFileName As String) As String
Dim enc
Dim bytes
Dim outstr As String
Dim pos As Integer
Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
'Convert the string to a byte array and hash it
bytes = GetFileBytes(sFileName)
bytes = enc.ComputeHash_2((bytes))
'Convert the byte array to a hex string
For pos = 1 To LenB(bytes)
outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2))
Next
FileToMD5Hex = outstr
Set enc = Nothing
End Function
Private Function GetFileBytes(path As String) As Byte()
Dim fso As Object
Set fso = CreateObject("scripting.FileSystemObject")
Dim fil As Object
Set fil = fso.GetFile(path)
' Dim fpga As Variant
GetFileBytes = fil.OpenAsTextStream().Read(fil.Size)
Set fil = Nothing
Set fso = Nothing
End Function
Хороший код (я буду использовать 'ADODB.Stream' вместо Open #F для двоичного чтения' и' Get' с этого момента). ** Однако есть недостающий компонент: ** у вас есть пример функции System.Security.Cryptography, загружающей последовательные фрагменты байтов в один хэш-расчет? –
Обновление: пользователь Florent B. отправил ответ с данными, переданными в куски в службу хеширования MD5 в [этом ответе на StackOverflow] (https://stackoverflow.com/a/36331066/362712). Это будет очень хорошо работать с вашим ' Реализация SAPI.spFileStream'. –