目前我的代码中出现自动化错误(注意,此错误仅发生在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。我需要一种方法来做到这两点。
答案 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