当前在代码行中出现自动化错误(请注意,此错误仅在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