无法在VBA上使用.GetBytes和.ComputeHash方法 [英] Cant use .GetBytes and .ComputeHash methods on VBA

查看:277
本文介绍了无法在VBA上使用.GetBytes和.ComputeHash方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将VB函数转换为VBA.该函数正在使用"System.Text.UTF8Encoding""System.Security.Cryptography.HMACSHA256"

I want to translate a VB function to VBA. The function is using "System.Text.UTF8Encoding" and "System.Security.Cryptography.HMACSHA256"

对象及其".GetBytes"".ComputeHash"方法.

我已经在VBA代码中添加了系统"和"mscorlib.dll"引用,但是我收到无效的过程调用或参数"错误.

I already added "System" and "mscorlib.dll" referrences to the VBA code, but I'm receiving "Invalid procedure call or argument" error.

这是我的VB函数:

Function HashString(ByVal StringToHash As String, ByVal HachKey As String) As String
    Dim myEncoder As New System.Text.UTF8Encoding
    Dim Key() As Byte = myEncoder.GetBytes(HachKey)
    Dim Text() As Byte = myEncoder.GetBytes(StringToHash)
    Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key)
    Dim HashCode As Byte() = myHMACSHA256.ComputeHash(Text)
    Dim hash As String = Replace(BitConverter.ToString(HashCode), "-", "")
    Return hash.ToLower
End Function

这就是我已经翻译成VBA的内容:

And this is what I've already translated into VBA:

Function HashString(ByRef StringToHash As String, ByRef HachKey As String) As String
    Dim myEncoder As Object
    Dim myHMACSHA256 As Object
    Dim Key As Byte
    Dim Text As Byte
    Dim HashCode As Byte
    Dim hash As String
    Set myEncoder = CreateObject("System.Text.UTF8Encoding")
    Set myHMACSHA256 = CreateObject("System.Security.Cryptography.HMACSHA256")
    Key = myEncoder.GetBytes(HachKey)
    Text = myEncoder.GetBytes(StringToHash)
    HashCode = myHMACSHA256.ComputeHash(Text)
    hash = Replace(BitConverter.ToString(HashCode), "-", "")
    HashString = hash.ToLower
End Function

有人可以帮忙吗?我的第一个猜测是我错误地使用了".GetBytes"和".ComputeHash"方法

Can anybody help on this? My first guess is that I'm using ".GetBytes" and ".ComputeHash" methods incorrectly

预先感谢

推荐答案

使用VBA计算HMACSHA256的工作示例:

A working example to compute the HMACSHA256 with VBA:

Function ComputeHMACSHA256(key As String, text As String) As String
  Dim encoder As Object, crypto As Object
  Dim hash() As Byte, hmacsha As String, i As Long

  ' compute HMACSHA256
  Set encoder = CreateObject("System.Text.UTF8Encoding")
  Set crypto = CreateObject("System.Security.Cryptography.HMACSHA256")
  crypto.key = encoder.GetBytes_4(key)
  hash = crypto.ComputeHash_2(encoder.GetBytes_4(text))

  ' convert to an hexa string
  hmacsha = String(64, "0")
  For i = 0 To 31
     Mid$(hmacsha, i + i + (hash(i) > 15) + 2) = Hex(hash(i))
  Next

  ComputeHMACSHA256 = LCase(hmacsha)
End Function


Sub UsageExample()
  Debug.Print ComputeHMACSHA256("abcdef", "12345")
End Sub

这篇关于无法在VBA上使用.GetBytes和.ComputeHash方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆