• 如何用vba获取文件的MD5 Hash值?


    MD5 可以作为文件的指纹。

    MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。

    如果要获取任意文件的MD5值,可以使用这些API函数直接获取MD5Init ,MD5UpdateMD5Final 。

    可以使用如下的代码:

    Option Base 0
    
    Public Type MD5_CTX
        i(1) As Long
        buf(3) As Long
        inc(63) As Byte
        digest(15) As Byte
    End Type
    
    Public Declare Sub MD5Init Lib "Cryptdll.dll" (ByVal pContex As Long)
    Public Declare Sub MD5Final Lib "Cryptdll.dll" (ByVal pContex As Long)
    Public Declare Sub MD5Update Lib "Cryptdll.dll" (ByVal pContex As Long, ByVal lPtr As Long, ByVal nSize As Long)
    
    Public Function ConvBytesToBinaryString(bytesIn() As Byte) As String
        Dim i As Long
        Dim nSize As Long
        Dim strRet As String
        
        nSize = UBound(bytesIn)
        For i = 0 To nSize
             strRet = strRet & Right$("0" & Hex(bytesIn(i)), 2)
        Next
        ConvBytesToBinaryString = strRet
    End Function
    
    Public Function GetMD5Hash(bytesIn() As Byte) As Byte()
        Dim ctx As MD5_CTX
        Dim nSize As Long
        
        nSize = UBound(bytesIn) + 1
        
        MD5Init VarPtr(ctx)
        MD5Update ByVal VarPtr(ctx), ByVal VarPtr(bytesIn(0)), nSize
        MD5Final VarPtr(ctx)
        
        GetMD5Hash = ctx.digest
    End Function
    
    Public Function GetMD5Hash_Bytes(bytesIn() As Byte) As String
        GetMD5Hash_Bytes = ConvBytesToBinaryString(GetMD5Hash(bytesIn))
    End Function
    
    Public Function GetMD5Hash_String(ByVal strIn As String) As String
        GetMD5Hash_String = GetMD5Hash_Bytes(StrConv(strIn, vbFromUnicode))
    End Function
    
    Public Function GetMD5Hash_File(ByVal strFile As String) As String
        Dim lFile As Long
        Dim bytes() As Byte
        Dim lSize As Long
        
        lSize = FileLen(strFile)
        If (lSize) Then
            lFile = FreeFile
            ReDim bytes(lSize - 1)
            Open strFile For Binary As lFile
            Get lFile, , bytes
            Close lFile
            GetMD5Hash_File = GetMD5Hash_Bytes(bytes)
        End If
    End Function
  • 相关阅读:
    LeetCode 023 Merge k Sorted Lists
    LeetCode 022 Generate Parentheses
    LeetCode 020 Valid Parentheses
    LeetCode 019 Remove Nth Node From End of List
    LeetCode 018 4Sum
    LeetCode 017 Letter Combinations of a Phone Number
    Linux常用命令详解(3)
    Linux常用命令详解(2)
    Linux常用命令详解(1)
    部署cobbler服务器
  • 原文地址:https://www.cnblogs.com/sundanceS/p/12506847.html
Copyright © 2020-2023  润新知