Problème base64 urgent merci

Résolu
finrodd Messages postés 3 Date d'inscription dimanche 19 septembre 2004 Statut Membre Dernière intervention 11 juillet 2005 - 1 juil. 2005 à 18:23
finrodd Messages postés 3 Date d'inscription dimanche 19 septembre 2004 Statut Membre Dernière intervention 11 juillet 2005 - 4 juil. 2005 à 17:50
BOnjour,
Je réalise une application conjointement en Visual Basic 6 et Visual Basic .Net
J'utilise une fonction permetant d'encoder en base 64 sous VB6 qui me satisfait complètement en voici le code :
Public Function Base64Encode$(S$)
Dim b() As Byte, Out() As Byte, i&, j&, L&, Enc() As Byte
If Len(S) = 0 Then Exit Function
Enc = StrConv("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", vbFromUnicode)
L Len(S): b StrConv(S, vbFromUnicode)
ReDim Preserve b(0 To (UBound(b) \ 3) * 3 + 2)
ReDim Preserve Out(0 To (UBound(b) \ 3) * 4 + 3)
For i = 0 To UBound(b) - 1 Step 3
Out(j) Enc(b(i) \ 4): j j + 1
Out(j) Enc((b(i + 1) \ 16) Or (b(i) And 3) * 16): j j + 1
Out(j) Enc((b(i + 2) \ 64) Or (b(i + 1) And 15) * 4): j j + 1
Out(j) Enc(b(i + 2) And 63): j j + 1
Next i
For i 1 To i - L: Out(UBound(Out) - i + 1) 61: Next i
Base64Encode = StrConv(Out, vbUnicode)
End Function

Je n'arrive malheureusement pas à la convertir pour VB.net, je sais également qu'il y a le code
Dim enc As System.Text.UnicodeEncoding = New System.Text.UnicodeEncoding
Dim theBytes() As Byte = enc.GetBytes(TextBox1.Text)
TextBox2.Text = Convert.ToBase64String(theBytes)
mais étrangement celui ci ne produit pas le meme résultat que la fonction d'au dessus.
Si qqun pouvais m'aider ca serait super cool et il peut le faire de plusieurs facon : soit m'indiquer comment convertir le code en VB.NET, soit me dire comment obtenir le meme comportement entre les deux codes
MErci beaucoup c'est très urgent ^^

PS: Le tableau de bytes obtenus dans la deuxième méthode est étrange, il comporte une case sur deux quasiment toujours égale à 0. En les supprimant, les deux programmes se comportent de la même facon environ une fois sur deux ?!

Encore merci d'avance, je n'y arriverais pas tout seul

1 réponse

finrodd Messages postés 3 Date d'inscription dimanche 19 septembre 2004 Statut Membre Dernière intervention 11 juillet 2005
4 juil. 2005 à 17:50
Ben voila j'ai trouvé finalement, le code est plutot facile le trouver moins...
Je le rend disponible au cas où qqun aurait le même problème.

Module Base64

Public Function encode64(ByVal param As String) As String
Dim enc As System.Text.UnicodeEncoding = New System.Text.UnicodeEncoding
Dim theBytes() As Byte = System.Text.Encoding.GetEncoding(1252).GetBytes(param)

Return Convert.ToBase64String(theBytes)
End Function

Function Decode64(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
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
nGroup = Hex(nGroup)

Dim s As String
Dim i As Integer
For i = 0 To 5 - Len(nGroup)
s = "0" & s
Next i
nGroup = s & nGroup
pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
Chr(CByte("&H" & Mid(nGroup, 5, 2)))
sOut = sOut & Left(pOut, numDataBytes)
Next

Decode64 = sOut

End Function

End Module

a+
Mesmin Daniel
3
Rejoignez-nous