zoukankan      html  css  js  c++  java
  • 如何用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
  • 相关阅读:
    (萌O(∩_∩)O)哈希知识点小结
    hash应用以及vector的使用简介:POJ 3349 Snowflake Snow Snowflakes
    BestCoder Round #3HDU 4907
    搜索:POJ2251&POJ1426&POJ3087&POJ2488
    母函数初学四大题
    欧拉函数知识点总结及代码模板及欧拉函数表
    欧几里德与扩展欧几里德算法以及青蛙的约会~
    KMP 知识点总结
    HDU 1142 A Walk Through the Forest(dijkstra+记忆化DFS)
    HDU 1535 Invitation Cards(SPFA,及其优化)
  • 原文地址:https://www.cnblogs.com/sundanceS/p/12506847.html
Copyright © 2011-2022 走看看