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
  • 相关阅读:
    成长之思考题
    HP LaserJet P2055dn 通过网络连接打印机用户指南
    【转载】大牛给计算机专业学生的7个建议
    CMake 复制文件方法
    Gitee Git bash VSCode操作简易说明
    Qwt 编译 配置 使用
    Clion+Cmake+Qt5+Qwt+msys2+MinGW在Windows下的安装配置使用教程
    基于Cmake+QT+VS的C++项目构建开发编译简明教程
    在WINDOWS中安装使用GSL(MinGW64+Sublime Text3 & Visual Studio)
    JavaScript学习(2)call&apply&bind&eval用法
  • 原文地址:https://www.cnblogs.com/sundanceS/p/12506847.html
Copyright © 2011-2022 走看看