How to get the MD5 hex hash for a file using VBA?

前端 未结 3 653
失恋的感觉
失恋的感觉 2020-12-09 06:07

How can I get the MD5 hex hash for a file using VBA?

I need a version that works for a file.

Something as simple as this Python code:

import          


        
相关标签:
3条回答
  • 2020-12-09 06:34

    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)
    
    0 讨论(0)
  • 2020-12-09 06:51

    An older question that could use a better answer. These functions are specifically for hashing files, not for hashing passwords. As a bonus, I'm including a function for SHA1. If you get rid of the type declarations these functions work in VBScript too except that the GetFileBytes function needs to be changed to use FileSystemObject (or possibly ADO Stream) as the Free File doesn't exist 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
    
    0 讨论(0)
  • 2020-12-09 06:52

    http://www.di-mgt.com.au/crypto.html#MD5

    0 讨论(0)
提交回复
热议问题