Vba Excel"自动化错误"来自SHA256和HMACSHA256函数

时间:2016-09-06 02:51:49

标签: excel vba excel-vba

目前我的代码中出现自动化错误(注意,此错误仅发生在Windows 10上)

Set oUTF = CreateObject("System.Text.UTF8Encoding")

Set oEnc = CreateObject("System.Security.Cryptography.SHA256Managed")

这是完整的功能

Function HMACSHA256(strToSign As String, strKey() As Byte)
Dim lngLoop As Long
Dim oUTF, oEnc
Dim HMAC() As Byte
Dim lastrow As Long

On Error GoTo err_handler

Set oUTF = CreateObject("System.Text.UTF8Encoding")
Set oEnc = CreateObject("System.Security.Cryptography.HMACSHA256")
oEnc.key = strKey
HMAC = oEnc.ComputeHash_2(oUTF.GetBytes_4(strToSign)) 

HMACSHA256 = HMAC

Exit Function

err_handler:
    Worksheets("Log Sheet").Cells(lastrow, 4) = "Fail"
    Worksheets("Log Sheet").Cells(lastrow, 5) = Err.Description
    MsgBox Err.Description, vbCritical

End Function

根据我的测试和研究,我发现这些行上的这个错误与.netframework版本4.6有关。安装.netframework 3.5版修复了此错误并允许代码正确运行。然而,这个电子表格将提供给客户端,我宁愿让功能工作而不必请求客户端安装3.5(电子表格需要所有客户端需要使用它的所有功能,即他们不必安装任何事情(办公室除外),都必须包含在excel文件中)

有没有人知道这样做的另一种方式?我找到了一种使用类模块执行SHA256的方法,但这不适用于HMACSHA256。我需要一种方法来做到这两点。

2 个答案:

答案 0 :(得分:1)

可以通过安装.NET Framework 3.5来解决此问题,可以在此处找到:https://www.microsoft.com/en-ca/download/details.aspx?id=21

答案 1 :(得分:0)

所以我最终解决了这个问题。我发现了另一个类模块,它完成了以前由.net组件完成的所有工作。

我找到了类模块 http://www.vbforums.com/showthread.php?635398-VB6-HMAC-SHA-256-HMAC-SHA-1-Using-Crypto-API

这是我更新的代码:

Function HMACSHA256A(strToSign As String, strKey() As Byte)

    Dim lngLoop As Long
    Dim oUTF, oEnc
    Dim HMAC() As Byte
    Dim lastrow As Long
    Dim byteString() As Byte

    On Error GoTo err_handler
    lastrow = FindLastRow
    Set Test = New HS256
    Test.InitHmac strKey
    byteString = Test.ToUTF8(strToSign)
    HMACSHA256A = Test.HMACSHA256(byteString)
    Worksheets("Log Sheet").Cells(lastrow, 4) = "Pass"
    Exit Function

err_handler:
    Worksheets("Log Sheet").Cells(lastrow, 4) = "Fail"
    Worksheets("Log Sheet").Cells(lastrow, 5) = Err.Description
    MsgBox Err.Description, vbCritical

End Function