我試圖將ASP/VBScript OAuth庫轉換爲VBA。其中一個挑戰是這樣一行代碼:Base64 HMAC SHA1 VBA中的字符串
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庫的副本可在此網站上查看。您必須向下滾動瀏覽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=
我想補充一點,此功能對於OAuth 1.0是必需的,但對OAuth 2.0不是必需的。 – HK1 2012-04-09 13:17:14