Использование HDMAC-SHA1 в VBA для Oauth 1.0
Я новичок в OAUTH 1.0a, и я пытаюсь пройти через этот процесс с помощью VBA. На этом сайте я нашел код, который был очень полезен при расчете подписи для процесса OAUTH. Вот код, который я использую:
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
Я также нашел отличный веб-сайт, который создает отличный шаблон для настройки базовой строки и заголовка процесса:
https://oauth.googlecode.com/svn/code/javascript/example/signature.html
Далее, у меня есть пример необработанных параметров, которые нужно поместить в процесс Oauth, и какой должна быть полученная в результате подпись.
Ключ c5bb4dcb7bd6826c7c4340df3f791188
Секрет 7d30246211192cda43ede3abd9b393b9
Токен доступа VbiNYl63EejjlKdQM6FeENzcnrLACrZ2JYD6NQROfVI=
Секрет доступа XCF9RzyQr4UEPloA+WlC06BnTfYC1P0Fwr3GUw/B0Es=
Метка времени 1344885636
Nonce 0bba225a40d1bbac2430aa0c6163ce44
HTTP метод GET
URL https://etws.etrade.com/accounts/rest/accountlist
Результирующая подпись%2FXiv96DzZabnUG2bzPZIH2RARHM%3D
Когда я набираю эту информацию на сайте, полученная подпись возвращается. Однако при использовании кода VBA выше подпись неверна.
Я обнаружил, что приведенный выше код VBA прекрасно работает, пока не достигнет символа "+" в секрете токена. Я скопировал секрет до, но не включая символ "+" и использовал его в качестве секрета. Когда я сделал это, подпись, сгенерированная сайтом, и подпись, сгенерированная кодом, совпали. Однако подписи не совпадают после добавления символа "+" к секрету.
У кого-нибудь есть понимание проблемы?
Спасибо!