Funciones Hash desde Excel VBA

Hola a toda mi comunidad, hoy veremos un tema bastante poco difundido, el cual es Funciones Hash desde Excel VBA

Descargar Funciones hash desde Excel VBA.xlsm

Antes de continuar, le envío un saludo a mi seguidor número 1, Gustavo :V

Empecemos con la definición de lo que es un hash, para ello consulto la página de Kaspersky

Es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija

Kaspersky

Parafraseando lo que dice Kaspersky, un hash es una función a la que le ingresamos una cadena de texto o números y nos devuelve una cadena de texto diferente, usualmente con más caracteres

Por ejemplo una de las funciones Hash más comunes es mi amigo MD5, si a esta función le ingreso el texto ‘Hola’, me devuelve lo siguiente

MD5 desde excel VBA

Y ahora me preguntarás M4ster, ¿Para qué usaría una función Hash en Excel?

El mayor uso de estas funciones es para guardar y comparar contraseñas, ésto lo explicaré con un ejemplo en otra publicación

Vale, es hora de ir al punto del éste POST y mostrar las funciones HASH que podemos usar desde Excel VBA

Función ROT_13 desde Excel VBA – Reversible

Aplicar el ROT13 a un texto se reduce a examinar sus caracteres alfabéticos y sustituirlos por la letra que está 13 posiciones por delante en el alfabeto, volviendo al principio si es necesario y conservando las mayúsculas y minúsculas

Fuente: Wikipedia

La función que te voy a mostrar es la función ROT en general, a la cual tendrá una variable R opcional (Con valor 13 predeterminado), el código a utilizar es:

Public Function Convertir_ROT(ByVal Texto_A_Codificar As String, Optional ByVal r As Integer = 13) As String
    Dim c, f, i As Integer
    For i = 1 To Len(Texto_A_Codificar)
        c = Asc(Mid(Texto_A_Codificar, i, 1))
        If c >= 97 And c <= 122 Then
            f = 97
        ElseIf c >= 65 And c <= 90 Then f = 65
        Else: GoTo Construye: End If
        c = r + c - f
        Do: c = c Mod 26: Loop While c > (26 - 1)
        c = c + f
Construye:         Convertir_ROT = Convertir_ROT & Chr(c)
    Next i
End Function

Obtenemos el ROT13 si no enviamos el valor opcional

ROT13 desde excel VBA

Por ejemplo si declaro el valor 9 como opcional, obtendré el ROT9 de la palabra ‘Hola’

ROT desde excel VBA

Función CRC32 desde Excel VBA

El CRC es un código de detección de error cuyo cálculo es una larga división de computación en el que se descarta el cociente y el resto se convierte en el resultado

Fuente: Wikipedia

Ésta función la podemos usar desde VBA con el siguiente código:

Public Function Convertir_CRC32(Texto_A_Codificar) As String

    Dim crc32Table(256) As Long
    crc32Table(0) = 0
    crc32Table(1) = 1996959894
    crc32Table(2) = -301047508
    crc32Table(3) = -1727442502
    crc32Table(4) = 124634137
    crc32Table(5) = 1886057615
    crc32Table(6) = -379345611
    crc32Table(7) = -1637575261
    crc32Table(8) = 249268274
    crc32Table(9) = 2044508324
    crc32Table(10) = -522852066
    crc32Table(11) = -1747789432
    crc32Table(12) = 162941995
    crc32Table(13) = 2125561021
    crc32Table(14) = -407360249
    crc32Table(15) = -1866523247
    crc32Table(16) = 498536548
    crc32Table(17) = 1789927666
    crc32Table(18) = -205950648
    crc32Table(19) = -2067906082
    crc32Table(20) = 450548861
    crc32Table(21) = 1843258603
    crc32Table(22) = -187386543
    crc32Table(23) = -2083289657
    crc32Table(24) = 325883990
    crc32Table(25) = 1684777152
    crc32Table(26) = -43845254
    crc32Table(27) = -1973040660
    crc32Table(28) = 335633487
    crc32Table(29) = 1661365465
    crc32Table(30) = -99664541
    crc32Table(31) = -1928851979
    crc32Table(32) = 997073096
    crc32Table(33) = 1281953886
    crc32Table(34) = -715111964
    crc32Table(35) = -1570279054
    crc32Table(36) = 1006888145
    crc32Table(37) = 1258607687
    crc32Table(38) = -770865667
    crc32Table(39) = -1526024853
    crc32Table(40) = 901097722
    crc32Table(41) = 1119000684
    crc32Table(42) = -608450090
    crc32Table(43) = -1396901568
    crc32Table(44) = 853044451
    crc32Table(45) = 1172266101
    crc32Table(46) = -589951537
    crc32Table(47) = -1412350631
    crc32Table(48) = 651767980
    crc32Table(49) = 1373503546
    crc32Table(50) = -925412992
    crc32Table(51) = -1076862698
    crc32Table(52) = 565507253
    crc32Table(53) = 1454621731
    crc32Table(54) = -809855591
    crc32Table(55) = -1195530993
    crc32Table(56) = 671266974
    crc32Table(57) = 1594198024
    crc32Table(58) = -972236366
    crc32Table(59) = -1324619484
    crc32Table(60) = 795835527
    crc32Table(61) = 1483230225
    crc32Table(62) = -1050600021
    crc32Table(63) = -1234817731
    crc32Table(64) = 1994146192
    crc32Table(65) = 31158534
    crc32Table(66) = -1731059524
    crc32Table(67) = -271249366
    crc32Table(68) = 1907459465
    crc32Table(69) = 112637215
    crc32Table(70) = -1614814043
    crc32Table(71) = -390540237
    crc32Table(72) = 2013776290
    crc32Table(73) = 251722036
    crc32Table(74) = -1777751922
    crc32Table(75) = -519137256
    crc32Table(76) = 2137656763
    crc32Table(77) = 141376813
    crc32Table(78) = -1855689577
    crc32Table(79) = -429695999
    crc32Table(80) = 1802195444
    crc32Table(81) = 476864866
    crc32Table(82) = -2056965928
    crc32Table(83) = -228458418
    crc32Table(84) = 1812370925
    crc32Table(85) = 453092731
    crc32Table(86) = -2113342271
    crc32Table(87) = -183516073
    crc32Table(88) = 1706088902
    crc32Table(89) = 314042704
    crc32Table(90) = -1950435094
    crc32Table(91) = -54949764
    crc32Table(92) = 1658658271
    crc32Table(93) = 366619977
    crc32Table(94) = -1932296973
    crc32Table(95) = -69972891
    crc32Table(96) = 1303535960
    crc32Table(97) = 984961486
    crc32Table(98) = -1547960204
    crc32Table(99) = -725929758
    crc32Table(100) = 1256170817
    crc32Table(101) = 1037604311
    crc32Table(102) = -1529756563
    crc32Table(103) = -740887301
    crc32Table(104) = 1131014506
    crc32Table(105) = 879679996
    crc32Table(106) = -1385723834
    crc32Table(107) = -631195440
    crc32Table(108) = 1141124467
    crc32Table(109) = 855842277
    crc32Table(110) = -1442165665
    crc32Table(111) = -586318647
    crc32Table(112) = 1342533948
    crc32Table(113) = 654459306
    crc32Table(114) = -1106571248
    crc32Table(115) = -921952122
    crc32Table(116) = 1466479909
    crc32Table(117) = 544179635
    crc32Table(118) = -1184443383
    crc32Table(119) = -832445281
    crc32Table(120) = 1591671054
    crc32Table(121) = 702138776
    crc32Table(122) = -1328506846
    crc32Table(123) = -942167884
    crc32Table(124) = 1504918807
    crc32Table(125) = 783551873
    crc32Table(126) = -1212326853
    crc32Table(127) = -1061524307
    crc32Table(128) = -306674912
    crc32Table(129) = -1698712650
    crc32Table(130) = 62317068
    crc32Table(131) = 1957810842
    crc32Table(132) = -355121351
    crc32Table(133) = -1647151185
    crc32Table(134) = 81470997
    crc32Table(135) = 1943803523
    crc32Table(136) = -480048366
    crc32Table(137) = -1805370492
    crc32Table(138) = 225274430
    crc32Table(139) = 2053790376
    crc32Table(140) = -468791541
    crc32Table(141) = -1828061283
    crc32Table(142) = 167816743
    crc32Table(143) = 2097651377
    crc32Table(144) = -267414716
    crc32Table(145) = -2029476910
    crc32Table(146) = 503444072
    crc32Table(147) = 1762050814
    crc32Table(148) = -144550051
    crc32Table(149) = -2140837941
    crc32Table(150) = 426522225
    crc32Table(151) = 1852507879
    crc32Table(152) = -19653770
    crc32Table(153) = -1982649376
    crc32Table(154) = 282753626
    crc32Table(155) = 1742555852
    crc32Table(156) = -105259153
    crc32Table(157) = -1900089351
    crc32Table(158) = 397917763
    crc32Table(159) = 1622183637
    crc32Table(160) = -690576408
    crc32Table(161) = -1580100738
    crc32Table(162) = 953729732
    crc32Table(163) = 1340076626
    crc32Table(164) = -776247311
    crc32Table(165) = -1497606297
    crc32Table(166) = 1068828381
    crc32Table(167) = 1219638859
    crc32Table(168) = -670225446
    crc32Table(169) = -1358292148
    crc32Table(170) = 906185462
    crc32Table(171) = 1090812512
    crc32Table(172) = -547295293
    crc32Table(173) = -1469587627
    crc32Table(174) = 829329135
    crc32Table(175) = 1181335161
    crc32Table(176) = -882789492
    crc32Table(177) = -1134132454
    crc32Table(178) = 628085408
    crc32Table(179) = 1382605366
    crc32Table(180) = -871598187
    crc32Table(181) = -1156888829
    crc32Table(182) = 570562233
    crc32Table(183) = 1426400815
    crc32Table(184) = -977650754
    crc32Table(185) = -1296233688
    crc32Table(186) = 733239954
    crc32Table(187) = 1555261956
    crc32Table(188) = -1026031705
    crc32Table(189) = -1244606671
    crc32Table(190) = 752459403
    crc32Table(191) = 1541320221
    crc32Table(192) = -1687895376
    crc32Table(193) = -328994266
    crc32Table(194) = 1969922972
    crc32Table(195) = 40735498
    crc32Table(196) = -1677130071
    crc32Table(197) = -351390145
    crc32Table(198) = 1913087877
    crc32Table(199) = 83908371
    crc32Table(200) = -1782625662
    crc32Table(201) = -491226604
    crc32Table(202) = 2075208622
    crc32Table(203) = 213261112
    crc32Table(204) = -1831694693
    crc32Table(205) = -438977011
    crc32Table(206) = 2094854071
    crc32Table(207) = 198958881
    crc32Table(208) = -2032938284
    crc32Table(209) = -237706686
    crc32Table(210) = 1759359992
    crc32Table(211) = 534414190
    crc32Table(212) = -2118248755
    crc32Table(213) = -155638181
    crc32Table(214) = 1873836001
    crc32Table(215) = 414664567
    crc32Table(216) = -2012718362
    crc32Table(217) = -15766928
    crc32Table(218) = 1711684554
    crc32Table(219) = 285281116
    crc32Table(220) = -1889165569
    crc32Table(221) = -127750551
    crc32Table(222) = 1634467795
    crc32Table(223) = 376229701
    crc32Table(224) = -1609899400
    crc32Table(225) = -686959890
    crc32Table(226) = 1308918612
    crc32Table(227) = 956543938
    crc32Table(228) = -1486412191
    crc32Table(229) = -799009033
    crc32Table(230) = 1231636301
    crc32Table(231) = 1047427035
    crc32Table(232) = -1362007478
    crc32Table(233) = -640263460
    crc32Table(234) = 1088359270
    crc32Table(235) = 936918000
    crc32Table(236) = -1447252397
    crc32Table(237) = -558129467
    crc32Table(238) = 1202900863
    crc32Table(239) = 817233897
    crc32Table(240) = -1111625188
    crc32Table(241) = -893730166
    crc32Table(242) = 1404277552
    crc32Table(243) = 615818150
    crc32Table(244) = -1160759803
    crc32Table(245) = -841546093
    crc32Table(246) = 1423857449
    crc32Table(247) = 601450431
    crc32Table(248) = -1285129682
    crc32Table(249) = -1000256840
    crc32Table(250) = 1567103746
    crc32Table(251) = 711928724
    crc32Table(252) = -1274298825
    crc32Table(253) = -1022587231
    crc32Table(254) = 1510334235
    crc32Table(255) = 755167117

   Dim crc32Result As Long
   crc32Result = &HFFFFFFFF
      
   Dim i As Integer
   Dim iLookup As Integer
   Dim buffer() As Byte
   buffer = StrConv(Texto_A_Codificar, vbFromUnicode)
   
   For i = LBound(buffer) To UBound(buffer)
      iLookup = (crc32Result And &HFF) Xor buffer(i)
      crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And 16777215
      crc32Result = crc32Result Xor crc32Table(iLookup)
   Next i
   
   Convertir_CRC32 = Not (crc32Result)

End Function

Al ejecutarla obtenemos el siguiente resultado

Función CRC32 desde Excel VBA

Función Base64 desde Excel VBA

Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII.

Fuente: Wikipedia

En éste caso sólo usaremos la función base64 para texto, si en caso deseas usarla para imágenes, te recomiendo leer la siguiente publicación

Ésta función es de suma importancia declararla para las siguientes funciones que vamos a utilizar en éste POST

Usaremos dos funciones, una para convertir un texto a base64 y otra para realizar el proceso inverso (De base64 a texto)

Option Explicit
Private InitDone       As Boolean
Private Map1(0 To 63)  As Byte
Private Map2(0 To 127) As Byte

Public Function Codificar_Base64(ByVal s As String) As String
   Codificar_Base64 = Base64Encode(ConvertStringToBytes(s))
End Function

Private Function Base64Encode(InData() As Byte)
   Base64Encode = Base64Encode2(InData, UBound(InData) - LBound(InData) + 1)
End Function

Private Function Base64Encode2(InData() As Byte, ByVal InLen As Long) As String
   If Not InitDone Then Init
   If InLen = 0 Then Base64Encode2 = "": Exit Function
   Dim ODataLen As Long: ODataLen = (InLen * 4 + 2) \ 3
   Dim OLen As Long: OLen = ((InLen + 2) \ 3) * 4
   Dim Out() As Byte
   ReDim Out(0 To OLen - 1) As Byte
   Dim ip0 As Long: ip0 = LBound(InData)
   Dim ip As Long
   Dim op As Long
   Do While ip < InLen
      Dim i0 As Byte: i0 = InData(ip0 + ip): ip = ip + 1
      Dim i1 As Byte: If ip < InLen Then i1 = InData(ip0 + ip): ip = ip + 1 Else i1 = 0
      Dim i2 As Byte: If ip < InLen Then i2 = InData(ip0 + ip): ip = ip + 1 Else i2 = 0
      Dim o0 As Byte: o0 = i0 \ 4
      Dim o1 As Byte: o1 = ((i0 And 3) * &H10) Or (i1 \ &H10)
      Dim o2 As Byte: o2 = ((i1 And &HF) * 4) Or (i2 \ &H40)
      Dim o3 As Byte: o3 = i2 And &H3F
      Out(op) = Map1(o0): op = op + 1
      Out(op) = Map1(o1): op = op + 1
      Out(op) = IIf(op < ODataLen, Map1(o2), Asc("=")): op = op + 1
      Out(op) = IIf(op < ODataLen, Map1(o3), Asc("=")): op = op + 1
      Loop
   Base64Encode2 = ConvertBytesToString(Out)
End Function

Public Function Decodificar_Base64(ByVal s As String) As String
   If s = "" Then Decodificar_Base64 = "": Exit Function
   Decodificar_Base64 = ConvertBytesToString(Base64Decode(s))
End Function

Private Function Base64Decode(ByVal s As String) As Byte()
   If Not InitDone Then Init
   Dim IBuf() As Byte: IBuf = ConvertStringToBytes(s)
   Dim ILen As Long: ILen = UBound(IBuf) + 1
   If ILen Mod 4 <> 0 Then Err.Raise vbObjectError, , "Length of Base64 encoded input string is not a multiple of 4."
   Do While ILen > 0
      If IBuf(ILen - 1) <> Asc("=") Then Exit Do
      ILen = ILen - 1
      Loop
   Dim OLen As Long: OLen = (ILen * 3) \ 4
   Dim Out() As Byte
   ReDim Out(0 To OLen - 1) As Byte
   Dim ip As Long
   Dim op As Long
   Do While ip < ILen
      Dim i0 As Byte: i0 = IBuf(ip): ip = ip + 1
      Dim i1 As Byte: i1 = IBuf(ip): ip = ip + 1
      Dim i2 As Byte: If ip < ILen Then i2 = IBuf(ip): ip = ip + 1 Else i2 = Asc("A")
      Dim i3 As Byte: If ip < ILen Then i3 = IBuf(ip): ip = ip + 1 Else i3 = Asc("A")
      If i0 > 127 Or i1 > 127 Or i2 > 127 Or i3 > 127 Then _
         Err.Raise vbObjectError, , "Illegal character in Base64 encoded data."
      Dim b0 As Byte: b0 = Map2(i0)
      Dim b1 As Byte: b1 = Map2(i1)
      Dim b2 As Byte: b2 = Map2(i2)
      Dim b3 As Byte: b3 = Map2(i3)
      If b0 > 63 Or b1 > 63 Or b2 > 63 Or b3 > 63 Then _
         Err.Raise vbObjectError, , "Illegal character in Base64 encoded data."
      Dim o0 As Byte: o0 = (b0 * 4) Or (b1 \ &H10)
      Dim o1 As Byte: o1 = ((b1 And &HF) * &H10) Or (b2 \ 4)
      Dim o2 As Byte: o2 = ((b2 And 3) * &H40) Or b3
      Out(op) = o0: op = op + 1
      If op < OLen Then Out(op) = o1: op = op + 1
      If op < OLen Then Out(op) = o2: op = op + 1
      Loop
   Base64Decode = Out
End Function

Private Sub Init()
   Dim c As Integer, i As Integer

   i = 0
   For c = Asc("A") To Asc("Z"): Map1(i) = c: i = i + 1: Next
   For c = Asc("a") To Asc("z"): Map1(i) = c: i = i + 1: Next
   For c = Asc("0") To Asc("9"): Map1(i) = c: i = i + 1: Next
   Map1(i) = Asc("+"): i = i + 1
   Map1(i) = Asc("/"): i = i + 1

   For i = 0 To 127: Map2(i) = 255: Next
   For i = 0 To 63: Map2(Map1(i)) = i: Next
   InitDone = True
End Sub

Private Function ConvertStringToBytes(ByVal s As String) As Byte()
   Dim b1() As Byte: b1 = s
   Dim l As Long: l = (UBound(b1) + 1) \ 2
   If l = 0 Then ConvertStringToBytes = b1: Exit Function
   Dim b2() As Byte
   ReDim b2(0 To l - 1) As Byte
   Dim P As Long
   For P = 0 To l - 1
      Dim c As Long: c = b1(2 * P) + 256 * CLng(b1(2 * P + 1))
      If c >= 256 Then c = Asc("?")
      b2(P) = c
      Next
   ConvertStringToBytes = b2
End Function

Private Function ConvertBytesToString(b() As Byte) As String
   Dim l As Long: l = UBound(b) - LBound(b) + 1
   Dim b2() As Byte
   ReDim b2(0 To (2 * l) - 1) As Byte
   Dim p0 As Long: p0 = LBound(b)
   Dim P As Long
   For P = 0 To l - 1: b2(2 * P) = b(p0 + P): Next
   Dim s As String: s = b2
   ConvertBytesToString = s
End Function

Ejecutaremos las funciones Codificar_Base64 y Decodificar_Base64 las cuales reciben un texto

base64 texto desde excel vba

Función MD5 desde Excel VBA – Hash

Es un algoritmo de reducción criptográfico de 128 bits ampliamente usado. Uno de sus usos es el de comprobar que algún archivo no haya sido modificado.

Fuente: Wikipedia

Desde ésta función debemos agregar un código VBA que permita trabajar con Hexadecimales, el cual será el siguiente:

Private Function Convertir_Hexadecimal(vIn As Variant) As Variant

    Dim oD As Object
      
    Set oD = CreateObject("MSXML2.DOMDocument")
      
      With oD
        .LoadXML ""
        .DocumentElement.DataType = "bin.Hex"
        .DocumentElement.nodeTypedValue = vIn
      End With
    Convertir_Hexadecimal = Replace(oD.DocumentElement.Text, vbLf, "")
    
    Set oD = Nothing

End Function

Después de agregar el código para convertir a hexadecimal, usaremos el siguiente código para usar la función MD5

Public Function Convertir_MD5(ByVal Texto_A_Codificar As String, Optional bB64 As Boolean = 0) As String
        
    Dim oT As Object, oMD5 As Object
    Dim TextToHash() As Byte
    Dim bytes() As Byte
        
    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
 
    TextToHash = oT.GetBytes_4(Texto_A_Codificar)
    bytes = oMD5.ComputeHash_2((TextToHash))
 
    If bB64 = True Then
       Convertir_MD5 = Codificar_Base64(bytes)
    Else
       Convertir_MD5 = Convertir_Hexadecimal(bytes)
    End If
        
    Set oT = Nothing
    Set oMD5 = Nothing

End Function

Tener en cuenta que para usar ésta función es necesario agregar el código de la base64

Obtenemos el siguiente resultado:

Función MD5

Función SHA desde Excel VBA

Es un conjunto de funciones hash criptográficas (SHA-224, SHA-256, SHA-384, SHA-512) diseñadas por la Agencia de Seguridad Nacional (NSA) y publicada en 2001 por el Instituto Nacional de Estándares y Tecnología (NIST) como un Estándar Federal de Procesamiento de la Información (FIPS)

Fuente: Wikipedia

En esta publicación veremos cómo usar las funciones SHA1, SHA256, SHA384 y SHA512 desde Excel VBA y el uso es similar

Para poder usarlas debemos haber agregar el código de conversión a hexadecimal (Visto en el punto anterior) y el código de base64, las funciones son las siguientes:

Public Function Convertir_SHA1(Texto_A_Codificar As String, Optional bB64 As Boolean = 0) As String
   
    Dim oT As Object, oSHA1 As Object
    Dim TextToHash() As Byte
    Dim bytes() As Byte
            
    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oSHA1 = CreateObject("System.Security.Cryptography.SHA1Managed")
    
    TextToHash = oT.GetBytes_4(Texto_A_Codificar)
    bytes = oSHA1.ComputeHash_2((TextToHash))
        
    If bB64 = True Then
       Convertir_SHA1 = Codificar_Base64(bytes)
    Else
       Convertir_SHA1 = Convertir_Hexadecimal(bytes)
    End If
            
    Set oT = Nothing
    Set oSHA1 = Nothing
    
End Function


Public Function Convertir_SHA256(Texto_A_Codificar As String, Optional bB64 As Boolean = 0) As String
    Dim oT As Object, oSHA256 As Object
    Dim TextToHash() As Byte, bytes() As Byte
    
    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oSHA256 = CreateObject("System.Security.Cryptography.SHA256Managed")
    
    TextToHash = oT.GetBytes_4(Texto_A_Codificar)
    bytes = oSHA256.ComputeHash_2((TextToHash))
    
    If bB64 = True Then
       Convertir_SHA256 = Codificar_Base64(bytes)
    Else
       Convertir_SHA256 = Convertir_Hexadecimal(bytes)
    End If
    
    Set oT = Nothing
    Set oSHA256 = Nothing
    
End Function

Public Function Convertir_SHA384(Texto_A_Codificar As String, Optional bB64 As Boolean = 0) As String
    Dim oT As Object, oSHA384 As Object
    Dim TextToHash() As Byte, bytes() As Byte
    
    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oSHA384 = CreateObject("System.Security.Cryptography.SHA384Managed")
    
    TextToHash = oT.GetBytes_4(Texto_A_Codificar)
    bytes = oSHA384.ComputeHash_2((TextToHash))
    
    If bB64 = True Then
       Convertir_SHA384 = Codificar_Base64(bytes)
    Else
       Convertir_SHA384 = Convertir_Hexadecimal(bytes)
    End If
    
    Set oT = Nothing
    Set oSHA384 = Nothing
    
End Function

Public Function Convertir_SHA512(Texto_A_Codificar As String, Optional bB64 As Boolean = 0) As String
    Dim oT As Object, oSHA512 As Object
    Dim TextToHash() As Byte, bytes() As Byte
    
    Set oT = CreateObject("System.Text.UTF8Encoding")
    Set oSHA512 = CreateObject("System.Security.Cryptography.SHA512Managed")
    
    TextToHash = oT.GetBytes_4(Texto_A_Codificar)
    bytes = oSHA512.ComputeHash_2((TextToHash))
    
    If bB64 = True Then
       Convertir_SHA512 = Codificar_Base64(bytes)
    Else
       Convertir_SHA512 = Convertir_Hexadecimal(bytes)
    End If
    
    Set oT = Nothing
    Set oSHA512 = Nothing
    
End Function

El resultado que obtenemos será similar, les muestro el resultado del SHA1

SHA1 SHA256 SHA512

Muy bien, espero que te haya gustado mi publicación, soy el ingeniero M4STER y cualquier consulta la puedes realizar al correo Luisrojas@tutorialesexcel.com

Les dejo el archivo Excel, la contraseña es tutorialesexcel.com

Descargar Funciones hash desde Excel VBA.xlsm

Deja una respuesta