Codifica e decodifica in Base64: la guida essenziale

Codifica e decodifica in Base64: la guida essenziale

Gennaio 3, 2024 0 Di Ruggero Grando

Una funzione di decodifica Base64 a stringa in linguaggio Python senza l’utilizzo della libreria Base64

def base64_to_string(input_str_base64):
    # Mappa dei caratteri Base64
    base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    
    # Conversione dei caratteri in valori numerici
    def char_to_value(char):
        if char == '=':
            return 0
        return base64_chars.index(char)

    # Assicurarsi che la stringa sia di lunghezza multipla di 4
    if len(input_str_base64) % 4 != 0:
        raise ValueError("Lunghezza della stringa Base64 non valida")

    # Decodifica
    decoded_bytes = []
    for i in range(0, len(input_str_base64), 4):
        # Convertire 4 caratteri in 3 byte
        b = (char_to_value(input_str_base64[i]) << 18) + (char_to_value(input_str_base64[i + 1]) << 12) \
            + (char_to_value(input_str_base64[i + 2]) << 6) + char_to_value(input_str_base64[i + 3])
        decoded_bytes.append((b >> 16) & 255)
        decoded_bytes.append((b >> 8) & 255)
        decoded_bytes.append(b & 255)

    # Rimuovere eventuali byte di padding
    if input_str_base64.endswith("=="):
        decoded_bytes = decoded_bytes[:-2]
    elif input_str_base64.endswith("="):
        decoded_bytes = decoded_bytes[:-1]

    # Convertire i byte in una stringa
    return ''.join(chr(byte) for byte in decoded_bytes)

Ora, come abbiamo fatto precedentemente, analizziamo ogni parte del codice appena proposto.

Nella riga tre, la variabile “base64_charscontiene i 64 caratteri utilizzati nella codifica Base64 (lettere maiuscole e minuscole, numeri, più e slash). Questa mappa è usata per convertire i caratteri codificati in Base64 nei loro equivalenti numerici.

Nella riga sei, inizia la funzione char_to_value. Questa funzione interna converte un singolo carattere Base64 nel suo valore numerico. Se il carattere è un uguale (=), che indica un padding, ritorna zero, altrimenti, ritorna l’indice del carattere nella stringa “base64_chars“.

Nella riga undici si controlla che la lunghezza della stringa in input sia un multiplo di quattro, una condizione necessaria per una stringa codificata correttamente in Base64. Se non lo è, viene sollevata un’eccezione ValueError.

La decodifica viene eseguita dalla riga sedici alla riga ventitré iterando sulla stringa Base64 in gruppi di 4 caratteri. Nel ciclo for, ogni gruppo di 4 caratteri, viene convertito in un valore numerico unico, combinando i valori dei singoli caratteri tramite shift bit a bit (<<) e somma. Questo valore numerico è poi suddiviso in tre byte (8 bit ciascuno) attraverso operazioni di shift a destra (>>) e AND bit a bit (&).
I byte risultanti vengono aggiunti alla lista decoded_bytes.

Se la stringa Base64 termina con uno o due segni di uguale (= o ==), ciò indica che c’è stato un padding aggiunto durante la codifica. I byte corrispondenti a questo padding sono rimossi da decoded_bytes.

Infine, nell’ultima riga i byte decodificati vengono convertiti in caratteri usando la funzione chr e combinati in una stringa unica tramite join. Questa stringa viene restituita dalla funzione.

Pagina Successiva | Pagina Precedente

No votes yet.
Please wait...

Pagine: 1 2 3 4 5 6 7 8