ASP/VBScript OAuth ライブラリを VBA に変換しようとしています。課題の 1 つは、次のコード行です。
Get_Signature = b64_hmac_sha1(strSecret, strBaseSignature)
この関数 b64_hmac_sha1 は、実際には JavaScript ライブラリに含まれる関数です。VBA から JavaScript 関数を呼び出すのはかなり非現実的です。
私は暗号化についてほとんど知らないので、この b64_hmac_sha1 関数が何をするのかさえ明確ではありません。HMAC SHA1 は SHA1 とは異なりますか?
この関数が実際に何をしているのかを理解していれば、必要なことを実行するための VBA コードをオンラインで見つけることができるのではないかと半分疑っています。既存の関数が見つからない場合は、.NET 暗号化ライブラリを使用する関数を作成できる可能性があります (方法がわかれば、実際に VBA から .NET 暗号化ライブラリを呼び出すことができます)。
この JavaScript を VBA に変換する人を探しているわけではありません。この b64_hmac_sha1 関数が出力しているものを理解しようとしているだけなので、可能であれば VBA で同じ出力を実現する方法を見つけることができます。
この JavaScript ライブラリのコピーは、この Web サイトで見ることができます。VBScript を越えて JavaScript セクションまで下にスクロールする必要があります。 http://solstice.washington.edu/solstice/ASP_Signing_REST_Example
Edit1:
OK、これが私が書いて使用した関数です:
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=