Sujet : [VB.Net]Comment décoder une chaine encodée en base64 ?

Salut,

Tout est dans la question : je cherche le moyen de décoder une chaine qui est en base 64.
J'avais trouvé une fonction qui fait ça mais elle est écrite en VB or il me faut ça en VB.Net et je n'ai pas su l'adapter.
---
J'ai donc poursuivi mes recherches jusqu'à trouver le namespace pour Vb.Net qui permet de gérer le format base 64 :

System.Security.Cryptography

Les classes qui permettent l'encodage et le décodage sont les suivantes :

FromBase64Transform
ToBase64Transform

J'ai trouvé dans ces pages un exemple qui permet de décoder un fichier en base64 et de mettre de résultat dans un nouveau fichier. J'ai donc essayé d'adapter cet exemple avec le peu de connaissances que j'ai en Vb.Net pour convertir une chaine en base64 vers une chaine décodée et voici ce que j'ai obtenu :

'
' Fonction de décodage de chaine encodée au format base64
'
' @param    [String]    base64String    La chaine à décoder.
' @return   [String]                    La chaine décodée.
'
Public Function Base64Decode(ByVal base64String As String) As String
        
    Dim myTransform As New FromBase64Transform(FromBase64TransformMode.IgnoreWhiteSpaces)
    Dim myOutputBytes(myTransform.OutputBlockSize - 1) As Byte
    Dim sChaineDecodee As String = ""

    Dim myInputBytes(base64String.Length - 1) As Byte
    myInputBytes = System.Text.Encoding.ASCII.GetBytes(base64String)

    'Transform the data in chunks the size of InputBlockSize.
    Dim i As Integer = 0
    While myInputBytes.Length - i > 4 'myTransform.InputBlockSize
        myTransform.TransformBlock(myInputBytes, i, 4, myOutputBytes, 0) 'myTransform.InputBlockSize
        i += 4 'myTransform.InputBlockSize

        sChaineDecodee &= System.Text.Encoding.Default.GetString(myOutputBytes)
    End While

    'Transform the final block of data.
    myOutputBytes = myTransform.TransformFinalBlock(myInputBytes, i, myInputBytes.Length - i)
    sChaineDecodee &= System.Text.Encoding.Default.GetString(myOutputBytes)

    'Free up any used resources.
    myTransform.Clear()

    Return sChaineDecodee

End Function

L'ennui c'est que la chaine retournée est vide hmm et que je ne sais pas comment résoudre ce problème.

sChaineDecodee &= System.Text.Encoding.Default.GetString(myOutputBytes)

C'est ici le coeur du problème : sChaineDecodee vaut toujours vide. Quelle solution dois-je utiliser pour passer du tableau d'octets à la chaine ?

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

base64_decode




je suis loin ......

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

...oui...à des années lumières ! lol

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Vu que sylnic ne passe jamais su le forum (dommage) je ne sais pas si tu vas avoir une réponse.

À moins que kinou (nouvel expert .Net smile) passe dans le coin !

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Sylnic à l'aide !!!!! :'(

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

question con mais :
As tu penser a mettre un affichage de la chaine que tu passe en paramètre pour voir si elle est bien rempli ?

-------------------------------
L'imbecile cherche toujours à enseigner alors que le sage lui cherche toujours à apprendre....

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Ouep, c'est la 1ère chose que j'ai faite wink.

En fait, y'a bien quelque chose quand j'analyse ça :

System.Text.Encoding.Default.GetString(myOutputBytes)

Sauf que ca ne va pas dans la chaine...

Alors j'ai tout de même apporté une correction : j'avais mis des "&=" pour la concaténation. C'était faux puisque l'opérateur de concaténation en Vb est le "+". J'ai donc corrigé en remplaçant par "+=".

Cela dit, cela ne change rien au problème...

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

8 Dernière modification par SamRay1024 (07/04/2006 14h48m01s)

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Alors comme ca Samy on galère avec le .NET !! wink

Dis moi si avec ca tu t'en sort :

imports System
imports System.Text

Public Function Base64ToTexte(ByVal Texte As String) As String
    Try
        If Texte.Length = 0 Then
            Return ""
        Else
            Return Encoding.ASCII.GetString(Convert.FromBase64String(Texte))
        End If
    Catch ex As Exception
        Return ""
    End Try
End Function

et voici l'inverse :

Public Function TexteToBase64(ByVal Texte As String) As String
    Try
        Dim texteBytes As Byte() = Encoding.ASCII.GetBytes(Texte)
        If texteBytes.Length = 0 Then
            Return ""
        Else
            Return Convert.ToBase64String(texteBytes)
        End If
    Catch ex As Exception
        Return ""
    End Try
End Function

Sinon, lundi je te traduirai la fonction que tu as trouvée en VB en VB.Net car j'ai un doute sur "nGroup = Hex(nGroup)"  qui te propose a l'intérieur.

Tiens moi au courant

PS: Tu vois Cyb que des fois je viens sur le forum smile smile wink

Un intellectuel assis va moins loin qu'un con qui marche

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

YES ! UN SYLNIC ! SALUT !

Je vais essayer ce que tu me proposes et je te dis ça. Merci !!!

Et oui, je galère avec .Net. C'est vraiment de la merde en branche ce truc...Je le disais déjà avant sans connaître (par pure "racisme"), mais maintenant je connais !! Et je confirme... big_smile

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Petite précision ultime au passage : j'ai halluciné moi, l'opérateur de concaténation c'est bien "&", mais il semblerait que "+" fonctionne aussi. Je mélange tout moi...

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

11

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

Ouep les deux opérateurs fonctionnent

Un intellectuel assis va moins loin qu'un con qui marche

Re : [VB.Net]Comment décoder une chaine encodée en base64 ?

MERCI SYLNIC !!!

Enfin une fonction qui fonctionne !! Enfin quelqu'un qu'est pas un développeur du dimanche ! (...je dis ça parce que je passe pas mal de temps sur developpez.com...et je veux pas balancer, mais y'en a pas mal qui comprenne pas ce qu'il font ! Mais il le font quand même !).

Donc ca fonctionne. Cependant, j'ai un truc bizarre. En fait, j'ai encodé une base Access en base64 (juste la structure vierge de toute données) pour pouvoir recréer autant de bases que nécessaire. La chaine base64 de mon fichier, je l'ai collée dans une constante d'un module VB.

J'ai donc recraché ma base grâce à ta méthode, sauf que maintenant, quand je veux l'ouvrir, Access me demande le mot de passe de la base !! Or j'ai jamais mis de mot de passe...

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW