首先,感謝 nixda 提供的雜湊程式碼!
我對 VBA 有點陌生。我正在嘗試建立一個函數,該函數接受電子郵件地址並混淆使用者名稱部分,以便可以分發包含混淆的電子郵件地址的報告。
我已將以下內容放入 VBA 模組中:
Private Function EncodeBase64(ByVal sTextToHash As String)
Dim objXML As Object
Dim objNode As Object
Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function
Public Function BASE64SHA1(ByVal sTextToHash As String)
Dim asc As Object
Dim enc As Object
Dim TextToHash() As Byte
Dim SharedSecretKey() As Byte
Dim bytes() As Byte
Const cutoff As Integer = 5
Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
TextToHash = asc.GetBytes_4(sTextToHash)
SharedSecretKey = asc.GetBytes_4(sTextToHash)
enc.Key = SharedSecretKey
bytes = enc.ComputeHash_2((TextToHash))
BASE64SHA1 = EncodeBase64(bytes)
BASE64SHA1 = Left(BASE64SHA1, cutoff)
Set asc = Nothing
Set enc = Nothing
End Function
如果我呼叫工作簿中的函數,我可以很好地混淆電子郵件地址:
=BASE64SHA1(LEFT(A1,FIND("@",A1)-1))&"@"&MID(A1,FIND("@",A1)+1,999)
因此,如果我通過此函數,我會得到一個帶有哈希用戶名的電子郵件地址。偉大的!
但我希望能夠輸入:
=OBFUSCATEEMAIL(A1)
在工作表中
所以我打開了工作表的 VBA 模組,到目前為止我已經:
Public Function ObfuscateEmail(ByVal email As String)
Dim username As String
Dim domain As String
username = Left(email, InStr(email, "@") - 1)
domain = Right(email, Len(email) - InStr(email, "@"))
ObfuscateEmail = BASE64SHA1(username) & "@" & domain
End Function
當我嘗試呼叫這個新函數時,收到 #VALUE 錯誤!
對 BASE64SHA1 的呼叫導致了這個問題,但是:
a) 我知道從工作表呼叫時 BASE64SHA1 正在工作,並且
b) 在我新增對 BASE64SHA1 的呼叫之前,ObfuscateEmail 工作正常
我究竟做錯了什麼?
答案1
這行程式碼:
objNode.nodeTypedValue = arrData
使用的變數既不是暗淡'ed 也沒有被賦值。