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 : 16108
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
- Voir tous les langages pour ce code snippet



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

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

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