Я пытаюсь преобразовать библиотеку OAuth ASP / VBScript в VBA. Одна из проблем - это строка кода:
Get_Signature = b64_hmac_sha1(strSecret, strBaseSignature)
Эта функция, b64_hmac_sha1, на самом деле является функцией, содержащейся в библиотеке JavaScript. Мне кажется, что вызывать функцию JavaScript из VBA довольно непрактично.
Поскольку я так мало знаю о шифровании, мне даже не ясно, что делает эта функция b64_hmac_sha1. HMAC SHA1 отличается от SHA1?
Я наполовину подозреваю, что смогу найти в Интернете какой-нибудь код VBA, чтобы делать то, что мне нужно, если бы я просто понял, что на самом деле делает эта функция. Если я не найду существующую функцию, я мог бы написать такую, которая бы использовала бы библиотеку криптографии .NET (вы действительно можете вызвать библиотеки криптографии .NET из VBA, если знаете как).
Я не ищу кого-нибудь, кто бы преобразовал этот JavaScript в VBA. Я только пытаюсь понять, что именно выводит эта функция b64_hmac_sha1, поэтому я могу попытаться найти способы добиться того же результата в VBA, если это возможно.
Копия этой библиотеки JavaScript доступна на этом веб-сайте. Вам нужно будет прокрутить вниз от VBScript до раздела JavaScript. http://solstice.washington.edu/solstice/ASP_Signing_REST_Example
Edit1:
Хорошо, вот функции, которые я написал и использовал:
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
Используя эту функцию:
Debug.Print Base64_HMACSHA1("abc", "123")
VAsMU9SSWDe9krP3Gr56nXC2dsQ=