Есть ли в VBA Hash_HMAC?

Привет, я пытаюсь зашифровать строку для вызова веб-службы из VBA. Мне нужно выполнить следующую функцию в VBA, и у меня есть пример кода в PHP. Вот PHP-код. Кто-нибудь знает, как это сделать в VBA?

$binaryHash = hash_hmac('sha512', $url.$timestamp, $ws_session_array["sharedSecret"], true);
$hash = base64_encode($binaryHash);

person craig_nelson    schedule 23.11.2011    source источник
comment
karenware.com/powertools/pthasher.asp   -  person Tim Williams    schedule 23.11.2011
comment
@ Тим Уильямс, в целом это интересный сайт, спасибо.   -  person Doug Glancy    schedule 23.11.2011
comment
См. этот пост: stackoverflow.com/questions/ 10068548/   -  person HK1    schedule 09.04.2012


Ответы (1)


Вот что вам нужно:

Public Function Base64_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String)

    Dim asc As Object, enc As Object
    Dim TextToHash() As Byte
    Dim SharedSecretKey() As Byte
    Set asc = CreateObject("System.Text.UTF8Encoding")
    Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")

    TextToHash = asc.Getbytes_4(sTextToHash)
    SharedSecretKey = asc.Getbytes_4(sSharedSecretKey)
    enc.Key = SharedSecretKey

    Dim bytes() As Byte
    bytes = enc.ComputeHash_2((TextToHash))
    Base64_HMACSHA1 = EncodeBase64(bytes)
    Set asc = Nothing
    Set enc = Nothing

End Function

Private Function EncodeBase64(ByRef arrData() As Byte) As String

    Dim objXML As MSXML2.DOMDocument
    Dim objNode As MSXML2.IXMLDOMElement

    Set objXML = New MSXML2.DOMDocument

    ' byte array to base64
    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = arrData
    EncodeBase64 = objNode.Text

    Set objNode = Nothing
    Set objXML = Nothing

End Function
person HK1    schedule 09.04.2012
comment
О, и еще это должно быть System.Security.Cryptography.HMACSHA512 - person user3074620; 29.12.2014
comment
Может ли кто-нибудь объяснить, что делает CreateObject("System.Text.UTF8Encoding")? И похоже, что ComputeHash_2 — это искаженное имя, потому что VBA не может перегружать функции. Есть ли какой-нибудь хорошо задокументированный систематический способ использования классов .NET из VBA, к которому подключается этот код? - person eksortso; 04.04.2019