当前在代码行中出现自动化错误(请注意,此错误仅在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。我需要两种方法都可以。

最佳答案

所以我最终自己解决了这个问题。我发现了另一个类模块,该模块可以完成以前由.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

09-26 23:13