En primer lugar, ¡gracias a nixda por el código hash!
Soy algo nuevo en VBA. Estoy intentando crear una función que tome una dirección de correo electrónico y oculte la parte del nombre de usuario para poder distribuir un informe que contenga la dirección de correo electrónico ofuscada.
Puse lo siguiente en un 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
Y puedo ofuscar bien una dirección de correo electrónico si llamo a la función en el libro de trabajo:
=BASE64SHA1(LEFT(A1,FIND("@",A1)-1))&"@"&MID(A1,FIND("@",A1)+1,999)
Entonces, si paso esta función, obtengo una dirección de correo electrónico con un nombre de usuario con hash. ¡Excelente!
Pero me gustaría poder escribir:
=OBFUSCATEEMAIL(A1)
en la hoja de trabajo
Entonces abrí el módulo VBA de la hoja de trabajo y hasta ahora tengo:
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
Cuando intento llamar a esta nueva función, aparece un error #VALOR.
La llamada a BASE64SHA1 está provocando el problema, pero:
a) Sé que BASE64SHA1 funciona cuando se llama desde la hoja de trabajo, y
b) OfuscateEmail funciona bien hasta que agrego la llamada a BASE64SHA1
¿Qué estoy haciendo mal?
Respuesta1
Esta línea de código:
objNode.nodeTypedValue = arrData
utiliza una variable que no es niOscuro'ed ni se le ha asignado un valor.