Em primeiro lugar, obrigado ao nixda pelo código hash!
Eu sou meio novo no VBA. Estou tentando criar uma função que usa um endereço de e-mail e ofusca a parte do nome de usuário para que um relatório contendo o endereço de e-mail ofuscado possa ser distribuído.
Coloquei o seguinte em um módulo 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
E posso ofuscar um endereço de e-mail sem problemas se chamar a função na pasta de trabalho:
=BASE64SHA1(LEFT(A1,FIND("@",A1)-1))&"@"&MID(A1,FIND("@",A1)+1,999)
Portanto, se eu passar nesta função, recebo um endereço de e-mail com um nome de usuário com hash. Ótimo!
Mas eu gostaria de poder digitar:
=OBFUSCATEEMAIL(A1)
na planilha
Então abri o módulo VBA da planilha e até agora tenho:
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
Quando tento chamar esta nova função, recebo um erro #VALUE!
A chamada para BASE64SHA1 está causando o problema, mas:
a) Eu sei que BASE64SHA1 está funcionando quando chamado da planilha e
b) ObfuscateEmail funciona bem até adicionar a chamada para BASE64SHA1
O que estou fazendo de errado?
Responder1
Esta linha de código:
objNode.nodeTypedValue = arrData
usa uma variável que não é nemEscurecer'ed nem foi atribuído um valor.