Bonjour,
Je récupère d'un fichier XML 2 champs encryptés en Base64, l'un en HTML l'autre en GIF.
J'utilise le code ci dessous pour décoder. Cela marche pour le HTML mais pas pour le GIF. Le champ pour le GIF n'affiche qu'un bout de code débutant par "GIF87a"
Quelqun peut il me dire pourquoi, et surtout comment faire pour le GIF.
NB : je débute en VB, une explication claire serait appréciée...
Function Base64Decode(ByVal base64String As String) As String
Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim dataLength, sout, groupBegin
Dim numDataBytes, CharCounter, thischar, thisData, nGroup, pOut
'Suppression des espaces/entrées/tab, s'il y en a
base64String = Replace(base64String, vbCrLf, "")
base64String = Replace(base64String, vbTab, "")
base64String = Replace(base64String, " ", "")
'la longueur de la chaîne passée doit être un multiple de 4
dataLength = Len(base64String)
If dataLength Mod 4 <> 0 Then
Err.Raise 1, "Base64Decode", "Bad Base64 string."
Exit Function
End If
' Decodage de chaque groupe:
For groupBegin = 1 To dataLength Step 4
' Chaque groupe se transforme en 3 octets.
numDataBytes = 3
nGroup = 0
For CharCounter = 0 To 3
' On convertit chaque caractère en 6 bits de données, et l'ajouter à un
'entier pour assurer le stockage temporaire. Si le caractère est
'un '=', il y a un byte de données de moins (il ne peut avoir que 2 '=' au
'maximum dans toute la chaine).
thischar = Mid(base64String, groupBegin + CharCounter, 1)
If thischar = "=" Then
numDataBytes = numDataBytes - 1
thisData = 0
Else
thisData = InStr(1, Base64, thischar, vbBinaryCompare) - 1
End If
If thisData = -1 Then
Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
Exit Function
End If
nGroup = 64 * nGroup + thisData
Next
'Hex divise l'entier long en 6 groupes de 4 bits
nGroup = Hex(nGroup)
'Ajout des zéros de tête
nGroup = String(6 - Len(nGroup), "0") & nGroup
'Conversion de l'entier en héxa en 3 caractères
pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 5, 2)))
'concatenation avec la chaîne de sortie
sout = sout & Left(pOut, numDataBytes)
Next
Base64Decode = sout
End Function
Merci