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 : 28779
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

{Delphi} CODAGE EN BASE64 DE CHAÎNES UNICODE
Je cherchais depuis un certain temps comment faire pour coder des chaînes Unicode en base64 mais ne ...

{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 ...

{Delphi} LECTURE DE FICHIER .EML
Mes anciens Email sont stockés sous forme de fichiers textes .eml, j'ai des difficultés pour retrouv...

{Delphi} LE TRI PAR CASIERS
Le TRI PAR CASIERS ( bucket sort ) très simple et très rapide avait été snobé au début de la micro-i...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRAIRE UNE IMAGE CODÉE EN B64 D'UNE PAGE.HTM
Bonjour Ce Classeur est une approche de la façon d' EXTRAIRE des ELEMENTS (texte, Image...) d'une P...

{Python} BASE64 ENCRYPT/DECRYPT PYTHON BY MAXOU56800
Programme permettant d'encrypter et de decrypter une chaine de caractere en Texte lisible ou en Base...

{C / C++ / C++.NET} [C] WD_STRING V2.2
Fonctions de gestion des chaînes de caractères en langage C. Fonction Inverse : Renvoie pour chaq...

{C / C++ / C++.NET} [C] WD_STRING V1.9
Fonctions de gestion des chaînes de caractères en langage C. Fonction ChaineCompare : Compare deux ...

{Delphi} STREAM STRINGWRITER... UNE MICRO-LIBRAIRIE POUR ÉCRIRE DES CHAINES DANS UN FLUX
Cette micro-librairie (2 fonctions seulement) permet de lire et écrire des chaines de caractères dan...

{Visual Basic, VB6, VB.NET, VB 2005} UTILISATION DE SORTEDLIST POUR TRIER UNE COLLECTION DE VALEURS DÉCOMPOSÉES DE SOUS VALEURS
Il s'agit d'un exemple d'utilisation de SortedList réalisé avec VB Express 2010. L'objectif est d...