Variable hexadécimale sous VBA & algorithme chiffrement

Bonsoir à tous,

Je dois réaliser pour mon entreprise un fichier Excel où dans un des onglets je dois hacher un message via l'algorithme Hmac SHA1 avec 2 sources de données : 1ère = variable de type texte sur 32 caractères (exemple FDFDD45F4D56G4F4FDGFG54G4F564545) | 2ème : clé secrète [B]en hexadécimal[/B] sur 32 caractères aussi (exemple : ABCCF6215CCD5873384BCDFFC0241288).

Je dois ensuite hacher le tout via l'algorithme en hexa : résultat du type --> b7c11d274576c9e8cea08c411228c9610da15ec5

J'ai réussi à trouver un code vba sur internet mais le problème est que les 2 variables d'entrées sont du type texte hors la clé secrète, dans mon cas, est en hexa.

Je n'arrive pas du tout à changer cela, auriez vous des idées ? (je ne suis pas spécialisé en informatique d'où mes lacunes..)

Voici ce j'ai trouvé :

Public Function HEX_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String)

Dim asc As Object, enc As Object
Dim TextToHash() As Byte
Dim SharedSecretKey() As Byte
Dim SecretKey As String

Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")

TextToHash = asc.Getbytes_4(sTextToHash)
SharedSecretKey = asc.Getbytes_4(sSharedSecretKey)
enc.Key = SharedSecretKey

Dim Bytes() As Byte
Bytes = enc.ComputeHash_2((TextToHash))
HEX_HMACSHA1 = ConvToHexString(Bytes)

Set asc = Nothing
Set enc = Nothing

End Function

Private Function ConvToHexString(vIn As Variant) As Variant

Dim oD As Object
Set oD = CreateObject("MSXML2.DOMDocument")

With oD
.LoadXML "<root />"
.DocumentElement.DataType = "bin.Hex"
.DocumentElement.nodeTypedValue = vIn

End With

ConvToHexString = Replace(oD.DocumentElement.Text, vbLf, "")

Set oD = Nothing

End Function

Merci d'avance et bonne soirée.

Jérémy

Hello,

Et en mettant de type Variant ?

Donc je remplace String par Variant pour la variable "sSharedSecretKey" ? Et cela fonctionnera sans aucun autre changement ?

N'ai pas peur teste le programme avec type variant et repost si problème

Bonjour,

J'ai essayé de changer la variable mais le problème est toujours présent..

Le programme n'arrive pas à traduire l'hexa.

C'est quoi le message d'erreur ? et sur quelle ligne ?

Il n'y a pas de message d'erreur mais le résultat n'est pas celui attendu...

Vu que le programme ne prend pas ma clé secrète comme un nombre hexadécimal, le programme ne fonctionne pas correctement

As-tu tenté la fonction :

HEX(number)

exemple :

Dim hex_val As String
 hex_val = Hex(2000)

Bonjour à tous,

hé bé, posté sur combien de forum ?
On ne dira rien pour cette fois mais sache que ça démotive. On n'a pas trop envie de perdre du temps si la réponse est peut-être déjà ailleurs...

A tester, en convertissant les codes hexa en caractères.
Je préfère t"alerter si code=0. Vu que c'est aussi le code de fin de chaine je ne sais pas trop ce que ça donne s'il peut être présent dans la chaine.
A voir si d'autres caractères de contrôle ne perturbent pas non plus.

Sub test()
    Dim SecretKey As String, clé As String, carcode As Long, i As Long
    SecretKey = "ABCCF6215CCD5873384BCDFFC0241288"
    For i = 1 To Len(SecretKey) Step 2
        carcode = Application.WorksheetFunction.Hex2Dec(Mid(SecretKey, i, 2))
        If carcode = 0 Then MsgBox "Problème ?"
        clé = clé & Chr(carcode)
    Next i
End Sub

Si ça te semble ok je te laisse le transformer en fonction.
eric

Rechercher des sujets similaires à "variable hexadecimale vba algorithme chiffrement"