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 codifica in Base64 in linguaggio Python senza l’utilizzo della libreria Base64

Nei seguenti esempi di funzione di codifica e decodifica ho utilizzato una libreria di Python per la conversione in Base64. L’obiettivo del seguente codice è di riprodurre la codifica senza l’ausilio di una libreria apposita.

def string_to_base64(input_string):
    # Tabella dei caratteri Base64
    base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    # Conversione della stringa in byte (UTF-8)
    byte_array = input_string.encode("utf-8")

    # Conversione dei byte in binario
    binary_string = ''.join(format(byte, '08b') for byte in byte_array)

    # Padding per raggiungere un multiplo di 6 bit
    padding = (6 - len(binary_string) % 6) % 6
    binary_string_padded = binary_string + '0' * padding

    # Divisione in gruppi da 6 bit
    six_bit_groups = [binary_string_padded[i:i+6] for i in range(0, len(binary_string_padded), 6)]

    # Mappatura a caratteri Base64
    encoded_string = ''.join(base64_chars[int(bits, 2)] for bits in six_bit_groups)

    # Aggiunta del padding finale per raggiungere un multiplo di 4
    final_padding = '=' * ((4 - len(encoded_string) % 4) % 4)
    return encoded_string + final_padding

Analizziamo ogni passaggio in dettaglio:

Nella riga tre, la variabile “base64_charscontiene tutti i 64 caratteri utilizzati nella codifica Base64. Questi includono lettere maiuscole e minuscole (A-Z, a-z), numeri (0-9), più (+) e slash (/). Questa tabella è utilizzata per mappare gruppi di 6 bit ai corrispondenti caratteri Base64.
Conversione della Stringa in Byte (UTF-8):

Nella riga sei, la stringa “input_stringviene convertita in un array di byte utilizzando la codifica UTF-8. Questo è necessario perché Base64 opera su dati binari.

Nella riga nove, ciascun byte dell’array viene convertito in una stringa binaria a 8 bit (un byte) usando la funzione format. Queste stringhe binarie sono poi concatenate per formare una singola “binary_string“.

La codifica Base64 opera su blocchi di 6 bit. Se la lunghezza della binary_stringnon è un multiplo di 6, viene aggiunto un padding di zeri (0) alla fine per raggiungere il multiplo più vicino di 6. La variabile “binary_string_padded” contiene la stringa codificata più il padding di zeri. Il tutto viene eseguito nelle righe dodici e tredici.

La stringa binaria viene divisa in gruppi da 6 bit. Questo viene fatto suddividendo la “binary_string_padded” in segmenti da 6 bit ciascuno. La variabile “six_bit_groups” contiene i segmenti da 6 bit ciascuno. La riga sedici esegue questa operazione di suddivisione.

Nella riga diciannove, ogni gruppo di 6 bit viene convertito in un intero (usando la base 2) e poi mappato a un carattere corrispondente in base64_chars. Questo forma la stringa codificata “encoded_string“.

Nella riga ventidue, si verifica la lunghezza della stringa codificataencoded_string” deve essere un multiplo di 4. Se non lo è, vengono aggiunti uno o più caratteri di uguale (=) come padding alla fine di “encoded_string“.

Infine, la funzione ritorna la stringa codificata in Base64, che include sia la conversione dei dati originali sia il padding necessario per soddisfare i requisiti della codifica Base64.

Pagina Successiva | Pagina Precedente

No votes yet.
Please wait...

Pagine: 1 2 3 4 5 6 7 8