Come accennato in precedenza, Base64 non è una crittografia ma una codifica. Come puoi vedere nella RFC che ha specificato lo standard, base64 funziona nel modo seguente.
- Hai un flusso di caratteri s, di lunghezza n.
- leggi 3 valori a 8 bit dal flusso (ora hai un totale di 24 bit = 3 byte)
- Rompi questi 24 bit a 4 gruppi di 6 bit ciascuno
- Usando la tabella dell'alfabeto Base 64, codifichi ognuno dei gruppi a 6 bit nell'equivalente Base64
Ora, c'è la possibilità di raggiungere la fine dello stream e non si dispone di un (s mod 6! = 0) a 24 bit di gruppo. Se ciò accade, aggiungi degli zeri alla fine dell'input, finché non hai un numero intero di gruppi di 6 bit.
Dato che il tuo stream di input è codificato ASCII, quindi è composto da caratteri a 8 bit, ci sono solo due casi in cui finisci nello scenario sopra.
1) Hai 8 bit nell'ultimo gruppo
2) Hai 16 bit nell'ultimo gruppo
Nel primo caso, vengono aggiunti 4 zeri (che forniscono 12 bit) e l'output sarà composto da due caratteri (2 * 6 bit = 12 bit) codificati in base all'alfabeto e due "=" caratteri padding
Nel secondo caso, verranno aggiunti 2 zeri (fornendo un totale di 18 bit) e l'output sarà composto da tre caratteri (3 * 6 bit = 18 bit) e un carattere di riempimento "=".
Ecco come a volte finisci con uno, due o nessun "=" alla fine del testo codificato. Per maggiori informazioni dovresti leggere veramente la RFC che ha definito lo standard e la voce wikipedia ad essa correlata.