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
  • 相关阅读:
    centos6.5用tomcat安装jenkins
    maridb安装审计audit插件
    centos6.5安装配置supervisor
    centos mail使用外部SMTP发送邮件
    netsh导入导出IPSec配置策略
    nfs mount:reason given by server: Permission denied
    oracle备份脚本
    修改mysql root账号密码
    python生成二维码
    lvm的vg扩容
  • 原文地址:https://www.cnblogs.com/sundanceS/p/12506847.html
Copyright © 2011-2022 走看看