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 : 14396
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 ...

{C / C++ / C++.NET} FAST BASE64 / UUENCODING ENCODAGE/DECODAGE
Classe C++ permettant de coder/décoder rapidement et simplement une string en/depuis Base64/Uuencodi...

{Delphi} DELPHI : PROCEDURE SPLIT SIMILAIRE A LA FONCTION EPONYME EN VB
Découpe une chaîne délimitée en ses éléments pour remplir un tableau dynamique passé en paramètre. U...

{PHP} FONCTIONS DE BASE POUR GÉNÉRER DU XML EN PHP
J'avais besoin d'extraire beaucoup de données d'une base et de générer un flux xml en retour (pratiq...

{Visual Basic, VB6, VB.NET, VB 2005} RÉCUPÉRER ELEMENTS D'UNE PAGE WEB (EXEMPLE : DAILY 2 FLV)
Bonjour à tous ! Ne trouvant pas de source toute simple sur VBFrance (Il s'agit souvent de gros p...

{PHP} STRINGBUILDER / STRINGBUFFER EN PHP (CLASSE SPÉCIALEMENT CONÇUE POUR MANIPULER DES CHAÎNES DE CARACTÈRES...)
A l'instar de StringBuilder et de StringBuffer en Java il peut être intéressant d'avoir une classe d...

{C / C++ / C++.NET} SHAMAN LIBRAIRIE DE HASH SUPPORTANT SHA1 SHA256 SHA384 SHA512 MD5 BASE64
Shaman une DLL/SO(pour POSIX) que j'ai ecrit en C pour un autre projet en fac , qui permet de hasher...

{C / C++ / C++.NET} [C/WIN32] GÉNÉRATEUR DE CODE POUR UNE INITIALISATION SPÉCIALE DE CHAINE DE CARACTÈRES.
Yop, Voici BNMgenerator, à comprendre BruNews Method Generator. J'espère qu'il me pardonnera ce n...

{Visual Basic, VB6, VB.NET, VB 2005} DLL PERMETTANT DE RÉALISER DES OPÉRATIONS SUR DES VARIABLES STRING
Comme le dit le titre , il s'agit d'une dll ( activeX développée sous VB6 ( je ne suis pas assez ava...

{C / C++ / C++.NET} SPLIT EN C++ AVEC LES CONTENEURS STANDARD
Un simple Split en C++ (comme en PHP)... Malheureusement je n'ai rien trouve de semblable sur le si...