Encriptar un código con algoritmo sha-1 en Excel

Estuve buscando información sobre cómo encriptar con el algoritmo sha-1, encontré estos 2 videos que realizan el proceso en VB, quisiera saber si hay menera de hacer lo mismo en Excel.

https://www.youtube.com/watch?v=IcmgmsJowwg

https://www.youtube.com/watch?v=rxgXNctSFt8

1

1 respuesta

Respuesta
1

Este código no es mio lo encontré en la red y es a base de funciones son dos HexSHA1 y HexDefaultSHA1 la primera ingresas la palabra a encriptar más 4 números y la segunda solo la palabra este es un ejemplo

y esta es la macro como es normal en códigos para encriptar estos tienden a ser largos y complejos, hay cosas de esta macro que me llevaría tiempo entender, lo único que no trae es la funcion para desencriptar.

 'Attribute VB_Name = "SHA1vb"
 Option Explicit
 Private Type FourBytes
     A As Byte
     B As Byte
     C As Byte
     D As Byte
 End Type
 Private Type OneLong
     L As Long
 End Type
 Function HexDefaultSHA1(Message() As Byte) As String
 Dim H1 As Long, H2 As Long, H3 As Long, H4 As Long, H5 As Long
 DefaultSHA1 Message, H1, H2, H3, H4, H5
 HexDefaultSHA1 = DecToHex5(H1, H2, H3, H4, H5)
 End Function
 Function HexSHA1(Message() As Byte, ByVal Key1 As Long, ByVal Key2 As Long, ByVal Key3 As Long, ByVal Key4 As Long) As String
 Dim H1 As Long, H2 As Long, H3 As Long, H4 As Long, H5 As Long
 SHA1 Message, Key1, Key2, Key3, Key4, H1, H2, H3, H4, H5
 HexSHA1 = DecToHex5(H1, H2, H3, H4, H5)
 End Function
 Sub DefaultSHA1(Message() As Byte, H1 As Long, H2 As Long, H3 As Long, H4 As Long, H5 As Long)
 SHA1 Message, &H5A827999, &H6ED9EBA1, &H8F1BBCDC, &HCA62C1D6, H1, H2, H3, H4, H5
 End Sub
 Sub SHA1(Message() As Byte, ByVal Key1 As Long, ByVal Key2 As Long, ByVal Key3 As Long, ByVal Key4 As Long, H1 As Long, H2 As Long, H3 As Long, H4 As Long, H5 As Long)
 'CA62C1D68F1BBCDC6ED9EBA15A827999 + "abc" = "A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D"
 '"abc" = "A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D"
 Dim U As Long, P As Long
 Dim FB As FourBytes, OL As OneLong
 Dim I As Integer
 Dim W(80) As Long
 Dim A As Long, B As Long, C As Long, D As Long, E As Long
 Dim T As Long
 H1 = &H67452301: H2 = &HEFCDAB89: H3 = &H98BADCFE: H4 = &H10325476: H5 = &HC3D2E1F0
 U = UBound(Message) + 1: OL.L = U32ShiftLeft3(U): A = U \ &H20000000: LSet FB = OL 'U32ShiftRight29(U)
 ReDim Preserve Message(0 To (U + 8 And -64) + 63)
 Message(U) = 128
 U = UBound(Message)
 Message(U - 4) = A
 Message(U - 3) = FB.D
 Message(U - 2) = FB.C
 Message(U - 1) = FB.B
 Message(U) = FB.A
 While P < U
     For I = 0 To 15
         FB.D = Message(P)
         FB.C = Message(P + 1)
         FB.B = Message(P + 2)
         FB.A = Message(P + 3)
         LSet OL = FB
         W(I) = OL.L
         P = P + 4
     Next I
     For I = 16 To 79
         W(I) = U32RotateLeft1(W(I - 3) Xor W(I - 8) Xor W(I - 14) Xor W(I - 16))
     Next I
     A = H1: B = H2: C = H3: D = H4: E = H5
     For I = 0 To 19
         T = U32Add(U32Add(U32Add(U32Add(U32RotateLeft5(A), E), W(I)), Key1), ((B And C) Or ((Not B) And D)))
         E = D: D = C: C = U32RotateLeft30(B): B = A: A = T
     Next I
     For I = 20 To 39
         T = U32Add(U32Add(U32Add(U32Add(U32RotateLeft5(A), E), W(I)), Key2), (B Xor C Xor D))
         E = D: D = C: C = U32RotateLeft30(B): B = A: A = T
     Next I
     For I = 40 To 59
         T = U32Add(U32Add(U32Add(U32Add(U32RotateLeft5(A), E), W(I)), Key3), ((B And C) Or (B And D) Or (C And D)))
         E = D: D = C: C = U32RotateLeft30(B): B = A: A = T
     Next I
     For I = 60 To 79
         T = U32Add(U32Add(U32Add(U32Add(U32RotateLeft5(A), E), W(I)), Key4), (B Xor C Xor D))
         E = D: D = C: C = U32RotateLeft30(B): B = A: A = T
     Next I
     H1 = U32Add(H1, A): H2 = U32Add(H2, B): H3 = U32Add(H3, C): H4 = U32Add(H4, D): H5 = U32Add(H5, E)
 Wend
 End Sub
 Function U32Add(ByVal A As Long, ByVal B As Long) As Long
 If (A Xor B) < 0 Then
     U32Add = A + B
 Else
     U32Add = (A Xor &H80000000) + B Xor &H80000000
 End If
 End Function
 Function U32ShiftLeft3(ByVal A As Long) As Long
 U32ShiftLeft3 = (A And &HFFFFFFF) * 8
 If A And &H10000000 Then U32ShiftLeft3 = U32ShiftLeft3 Or &H80000000
 End Function
 Function U32ShiftRight29(ByVal A As Long) As Long
 U32ShiftRight29 = (A And &HE0000000) \ &H20000000 And 7
 End Function
 Function U32RotateLeft1(ByVal A As Long) As Long
 U32RotateLeft1 = (A And &H3FFFFFFF) * 2
 If A And &H40000000 Then U32RotateLeft1 = U32RotateLeft1 Or &H80000000
 If A And &H80000000 Then U32RotateLeft1 = U32RotateLeft1 Or 1
 End Function
 Function U32RotateLeft5(ByVal A As Long) As Long
 U32RotateLeft5 = (A And &H3FFFFFF) * 32 Or (A And &HF8000000) \ &H8000000 And 31
 If A And &H4000000 Then U32RotateLeft5 = U32RotateLeft5 Or &H80000000
 End Function
 Function U32RotateLeft30(ByVal A As Long) As Long
 U32RotateLeft30 = (A And 1) * &H40000000 Or (A And &HFFFC) \ 4 And &H3FFFFFFF
 If A And 2 Then U32RotateLeft30 = U32RotateLeft30 Or &H80000000
 End Function
 Function DecToHex5(ByVal H1 As Long, ByVal H2 As Long, ByVal H3 As Long, ByVal H4 As Long, ByVal H5 As Long) As String
 Dim H As String, L As Long
 DecToHex5 = "00000000 00000000 00000000 00000000 00000000"
 H = Hex(H1): L = Len(H): Mid(DecToHex5, 9 - L, L) = H
 H = Hex(H2): L = Len(H): Mid(DecToHex5, 18 - L, L) = H
 H = Hex(H3): L = Len(H): Mid(DecToHex5, 27 - L, L) = H
 H = Hex(H4): L = Len(H): Mid(DecToHex5, 36 - L, L) = H
 H = Hex(H5): L = Len(H): Mid(DecToHex5, 45 - L, L) = H
 End Function

Ante todo mil gracias por la respuesta y por el tiempo invertido en ella; le comento que estoy tratando de trabajar con la macro que me indica, pero realmente no entiendo cómo funciona, dado que escribo el dato a encriptar en la casilla b2 o b3, pero no se ejecuta ningún proceso, agradezco me informe cómo sería el proceso.

La programación de la macro inhibe el traer datos de otra celda tienes que poner el dato a encriptar en la fórmula tal cual aparecen en los ejemplos, de lo contrario en una no va a aparecer nada y en otra te va a dar error(#valor), por ejemplo si pones HexSHA1 y= HexDefaultSHA1(b2) no te va dar ningún resultado, tienes que escribirlo= HexDefaultSHA1("hola"), si usas HexSHA1 pasa lo mismo además te pide 4 valores llave que pueden los 4 números que más te gusten, por ejemplo:=hexsha1("hola", 1,2,3,4).

Muchas gracias por la ayuda, con la información que me acaba de dar me da una luz muy importante para poder continuar trabajando en el asunto y mirar si puedo utilizar la macro.

Que Dios lo bendiga!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas