How to get MD5 hex hash for file using VBA?

How to get MD5 shader for a file using VBA?

I need a version that works for the file.

Something simple like this Python code:

import hashlib def md5_for_file(fileLocation, block_size=2**20): f = open(fileLocation) md5 = hashlib.md5() while True: data = f.read(block_size) if not data: break md5.update(data) f.close() return md5.hexdigest() 

But in VBA.

+6
vba powerpoint-vba hash md5 hex
source share
3 answers
+3
source share

An older question that might use a better answer. These features are specifically designed for hashing files, not for hashing passwords. As a bonus, I turn on the function for SHA1. If you get rid of type declarations, these functions work in VBScript, except that the GetFileBytes function must be modified to use FileSystemObject (or, possibly, ADO Stream), since there is no free file in VBScript.

 Private Sub TestMD5() Debug.Print FileToMD5Hex("C:\test.txt") Debug.Print FileToSHA1Hex("C:\test.txt") End Sub 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 Public Function FileToSHA1Hex(sFileName As String) As String Dim enc Dim bytes Dim outstr As String Dim pos As Integer Set enc = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider") '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 FileToSHA1Hex = outstr 'Returns a 40 byte/character hex string Set enc = Nothing End Function Private Function GetFileBytes(ByVal path As String) As Byte() Dim lngFileNum As Long Dim bytRtnVal() As Byte lngFileNum = FreeFile If LenB(Dir(path)) Then ''// Does file exist? Open path For Binary Access Read As lngFileNum ReDim bytRtnVal(LOF(lngFileNum) - 1&) As Byte Get lngFileNum, , bytRtnVal Close lngFileNum Else Err.Raise 53 End If GetFileBytes = bytRtnVal Erase bytRtnVal End Function 
+14
source share

This should do it:

  Dim fileBytes() As Byte = File.ReadAllBytes(path:=fullPath) Dim Md5 As New MD5CryptoServiceProvider() Dim byteHash() As Byte = Md5.ComputeHash(fileBytes) Return Convert.ToBase64String(byteHash) 
-one
source share

All Articles