Caractères spéciaux UTF8
J
Bonjour,
Petit soucis sur le code VBA (code qui hache des données avec une clé secrète via l'algo HMAC SHA1) ci-dessous :
La variable "sSharedSecretKey" contient des caractères spéciaux, or les caractères spéciaux sont de la forme "«". Le résultat du code n'est pas celui attendu car la conversion en Byte n'est pas bonne.
Je suppose que c'est à cause de l'encodage UTF8 mais je ne sais pas du tout comment changer ça.
Pourriez vous m'aider ?
Jérémy
Petit soucis sur le code VBA (code qui hache des données avec une clé secrète via l'algo HMAC SHA1) ci-dessous :
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
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
'Check that Net Framework 3.5 (includes .Net 2 and .Net 3 is installed in windows
'and not just Net Advanced Services
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 FunctionLa variable "sSharedSecretKey" contient des caractères spéciaux, or les caractères spéciaux sont de la forme "«". Le résultat du code n'est pas celui attendu car la conversion en Byte n'est pas bonne.
Je suppose que c'est à cause de l'encodage UTF8 mais je ne sais pas du tout comment changer ça.
Pourriez vous m'aider ?
Jérémy
Bonjour Jeremy
essaie de décoder tes caractères unicode avec cette fonction
Function Utf8_Decode(ByVal txt As String) As String
Dim ln As Long, s As String, i As Integer, j As Integer, K As Integer
For ln = 1 To Len(txt)
i = Asc(Mid(txt, ln, 1))
If i > 127 Then
If Not i And 32 Then
j = Asc(Mid(txt, ln + 1, 1))
s = s & ChrW$(((31 And i) * 64 + (63 And j)))
ln = ln + 1
Else
j = Asc(Mid(txt, ln + 1, 1))
K = Asc(Mid(txt, ln + 2, 1))
s = s & ChrW$(((i And 15) * 16 * 256) + ((j And 63) * 64) + (K And 63))
ln = ln + 2
End If
Else
s = s & Chr$(i)
End If
Next ln
Utf8_Decode = s
End Function