Les Snippets

Connexion

Chaine vers Base 64 et vice versa

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 25/03/2006 23:41:19 et initié par EBArtSoft [Liste]
Date de mise à jour : 30/03/2006 12:55:00
Vue : 19978
Catégorie(s) : Cryptage, Fichier / Disque, Sécurité, Chaîne de caractères
Langages dispo pour ce code :
- VB6
- VB 2005, VB.NET 1.x
- PHP 3, PHP 4, PHP 5
- ColdFusion MX
- Python
- Windev
- VB6, VBA, VBScript



Langage : VB6
Date ajout : 25/03/2006
Posté par EBArtSoft [Liste]

Private Const EOL_SIZE      As Long = 2                ' Size of vbCrLf
Private Const LINE_SIZE     As Long = 40 + EOL_SIZE    ' Size of a line

Private Const Base64        As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Private Const Base64_EOF    As String = "="

Public Function Decode64(ByRef lpConvString As String) As String
    
    Dim pt          As Long
    Dim ptMax       As Long
    Dim dwBuffer    As Long
    Dim cbSize      As Long
    Dim cbBits      As Byte
    Dim aByte       As Byte
    
    
    dwBuffer = 0
    cbBits = 0
    cbSize = 0
    pt = 1
    ptMax = Len(lpConvString)
    
    Do While pt <= ptMax
        
        aByte = InStr(1, Base64, Mid$(lpConvString, pt, 1))
        If aByte Then
            
            ' Add 6 bits to the buffer
            dwBuffer = dwBuffer * 64 + aByte - 1
            cbBits = cbBits + 6
            If cbBits >= 8 Then
                Select Case cbBits
                    Case 12 ' 6 + 6
                        aByte = dwBuffer \ 16
                        dwBuffer = dwBuffer And 15
                        cbBits = 4
                    Case 10 ' 4 + 6
                        aByte = dwBuffer \ 4
                        dwBuffer = dwBuffer And 3
                        cbBits = 2
                    Case 8  ' 2 + 6
                        aByte = dwBuffer
                        dwBuffer = 0
                        cbBits = 0
                End Select
                cbSize = cbSize + 1
                Mid$(lpConvString, cbSize, 1) = Chr$(aByte)
            End If
        
        End If
        pt = pt + 1
    
    Loop
    
    Decode64 = Mid$(lpConvString, 1, cbSize)

End Function

Public Function Encode64(ByRef lpConvString As String) As String
    
    Dim pt          As Long
    Dim ptMax       As Long
    Dim dwBuffer    As Long
    Dim cbSize      As Long
    Dim cbBits      As Byte
    Dim cbLines     As Long
    Dim aByte       As Byte
    Dim lpBuffer    As String
    
    dwBuffer = 0
    cbBits = 0
    cbSize = EOL_SIZE                       ' Tips for the NewLine
    cbLines = 1
    pt = 1
    ptMax = Len(lpConvString)
    lpBuffer = String$(LINE_SIZE + ptMax * 2, 0)
    
    Do Until pt > ptMax
        
        ' Add 8 bits to the buffer
        dwBuffer = dwBuffer * 256 + Asc(Mid$(lpConvString, pt, 1))
        cbBits = cbBits + 8
        
        Do
            
            Select Case cbBits
            Case 6
                aByte = dwBuffer
                dwBuffer = 0
                cbBits = 0
            Case 8
                aByte = dwBuffer \ 4
                dwBuffer = dwBuffer And 3
                cbBits = 2
            Case 10
                aByte = dwBuffer \ 16
                dwBuffer = dwBuffer And 15
                cbBits = 4
            Case 12
                aByte = dwBuffer \ 64
                dwBuffer = dwBuffer And &H3F
                cbBits = 6
                
            Case 2 ' Only when pt = ptmax
                aByte = dwBuffer * 16
                dwBuffer = 0
                cbBits = 0
            Case 4 ' Only when pt = ptmax
                aByte = dwBuffer * 4
                dwBuffer = 0
                cbBits = 0
            
            End Select
        
            ' Add a character to the buffer
            cbSize = cbSize + 1
            Mid$(lpBuffer, cbSize, 1) = Mid$(Base64, 1 + aByte, 1)
            
            ' Add the NewLine to the buffer
            If (cbSize Mod LINE_SIZE) = 0 Then
                Mid$(lpBuffer, cbSize + 1, EOL_SIZE) = vbCrLf
                cbSize = cbSize + EOL_SIZE
                cbLines = cbLines + 1
            End If
        
        ' Loop while not done with this byte
        Loop While (cbBits = 6) Or ((pt = ptMax) And (cbBits > 0))
        
        pt = pt + 1
    
    Loop
    
    ' Add one or two bytes Base64_EOF
    Select Case (cbSize - EOL_SIZE * cbLines) Mod 3
      Case 1: '8 bit final
        Mid$(lpBuffer, cbSize + 1, 2) = Base64_EOF & Base64_EOF
        cbSize = cbSize + 2
      Case 2: '16 bit final
        Mid$(lpBuffer, cbSize + 1, 1) = Base64_EOF
        cbSize = cbSize + 1
    End Select
    
    ' Return the string and ignore the two first bytes
    Encode64 = Mid$(lpBuffer, 1 + EOL_SIZE, cbSize - EOL_SIZE)

End Function

Public Function hash_string(ByRef s As String) As String
    Dim h As Long
    Dim i As Long
    h = 0
    For i = 1 To Len(s)
        h = ((h And &HFF000000) \ &H1000000) + _
            (((h And &HFFFFFF) * 8) + Asc(Mid$(s, i, 1)))
    Next
    hash_string = Right$("00000000" & Hex$(h), 8)
End Function


Remarque :
'J'ai encore perdu le nom de l'auteur
Langage : VB.NET 1.x , VB 2005
Date ajout : 26/03/2006
Posté par Nix [Liste]
DateMAJ : 27/03/2006

#Region " Base64 "

    Public Shared Function DecodeBase64(ByVal txt As String) As String
        Dim strBytes() As Byte = System.Convert.FromBase64String(txt) 
        Return System.Text.Encoding.GetEncoding("iso-8859-1").GetString(strBytes) 
    End Function

    Public Shared Function EncodeBase64(ByVal txt As String) As String
        Dim strBytes() As Byte = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(txt) 
        Return System.Convert.ToBase64String(strBytes) 
    End Function



#End Region



Remarque :
Vous pouvez choisir un autre type d'encodage que ISO-8859-1 (c'est celui que j'utilise le plus)
Langage : PHP 3 , PHP 4 , PHP 5
Date ajout : 27/03/2006
Posté par malalam [Liste]
$sString64 = base64_encode ($sString); // encode la chaîne en base 64
$sString = base64_decode ($sString64); // decode une chaîne base 64
Langage : ColdFusion MX
Date ajout : 30/03/2006
Posté par nickadele [Liste]
DateMAJ : 30/03/2006
<cfset data64 = toBase64(stringData)> <---! Encode une chaine en base 64--->
 
 <!---Pour l'inverse on passe d'abord par une valeur binaire--->
 <cfset binaryData = toBinary(data64)>
 <cfset stringData = toString(binaryData)>

Langage : Python
Date ajout : 09/05/2006
Posté par Arglanir [Liste]
# l'import qui va bien
import base64
#les deux fonctions
encode = base64.encodestring
decode = base64.decodestring
#on peut tester
chaine = "Alea jacta est."
test = encode(chaine)
chaine == decode(test)

Langage : Windev
Date ajout : 12/09/2006
Posté par Elian Lacroix [Liste]
Encodage de sChaine en base 64 :
sChaine64 = Crypte(sChaine, "", crypteAucun, Vrai)
// Décodage inverse :
sChaine = Décrypte(sChaine64, "", crypteAucun, Vrai)
Langage : VB6 , VBA , VBScript
Date ajout : 20/12/2007
Posté par Renfield [Liste]

Public Function Base64Enc(ByRef vxbData() As Byte) As String
    With CreateObject("MSXML.DOMDocument").createElement("Base64")
        .dataType = "bin.base64"
        .nodeTypedValue = vxbData
        Base64Enc = .Text
    End With
End Function

Public Function Base64Dec(ByRef vsData As String) As Byte()
    With CreateObject("MSXML.DOMDocument").createElement("Base64")
        .dataType = "bin.base64"
        .Text = vsData
        Base64Dec = .nodeTypedValue
    End With
End Function



Snippets en rapport avec : String, Base64



Codes sources en rapport avec : String, Base64

{C# / C#.NET} CONVERSION D'UNE IMAGE EN BASE64STRING ET INVERSEMENT
A la suite d'une question sur le forum (http://www.csharpfr.com/forum.v2.aspx?ID=541969), voici une ...

{JAVA / J2EE} GENERATEUR DE MOT PAR INCREMENTATION
Cette class permet de renvoyer un mot à partir d'un autre avec une permutation du dernier caractère ...

{Delphi} LIBRAIRIE DE FONCTIONS DE GESTION DE SOUS-CHAINES.
Quelques fois, on aimerai avoir une sorte de "structure" de plusieurs éléments variable en taille et...

{Visual Basic, VB6, VB.NET, VB 2005} OPÉRATIONS SUR LES CHAINES DE CARACTÈRE OPTIMISÉES ET ÉTENDUES
Bonjour à tous, Voici un module regroupant un paquet de fonctions permettant des opérations sur l...

{C / C++ / C++.NET} VOTRE AVIS, CALCUL DE TFIDF C++
Je voudrais votre avis sur le petit code suivant. Voici un tout petit code pour le calcul de tfid...

{Flash} DETECTEUR AUTOMATIQUE DE MEDIA AS3 - AS2
je viens de la finir ! je m'en sers pour trier mes médias qui viennent d'un xml unique... ça peut se...

{C / C++ / C++.NET} CLASS STRING
Une Petite Class String qui permet de gerer les char* afin de falicité la gestion des chaine de ca...

{Flash} MODIFIER LES APOSTROPHES ET AUTRES CARACTÈRES MADE IN WORD DANS FLASH
Bonjour après avoir un peu trop cherché sur les pages de mon navigatuer pour trouver une solution af...

{PHP} GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU AUTRE)
Jusqu'à présent tous les générateurs de clé que j'ai trouvé utilisait une boucle ou les fonction sha...

{C / C++ / C++.NET} MYSTRING, CLASSE TRAITANT DES CHAÎNES DE CARACTÈRES
Ceci est une classe tout ce qu'il y'a de plus banal traitant des chaines de caractères. Commentée ai...