Base64 è in realtà molto semplice. Inoltre, non è un algoritmo di crittografia, quindi questa domanda probabilmente si adatta meglio a Stack Overflow.
L'idea alla base di Base64 è che vuoi essere in grado di prendere qualsiasi dato binario e convertirlo in qualcosa che può essere trattato come testo ASCII (cioè, lettere, numeri e alcuni caratteri speciali). Naturalmente i dati binari hanno 256 valori possibili per byte, ma per arrivare a una rappresentazione testuale, è necessario ridurli a non più di circa 80 o meno valori possibili. Dal momento che 64 è una potenza di due, è stato scelto.
64 valori equivale a sei bit. Di conseguenza, ogni tre byte (24 bit) nel binario originale si traduce in quattro byte in Base64 (anche 24 bit, come quattro gruppi di sei).
L'algoritmo è semplicemente:
- prendi il file binario originale.
- dividi in gruppi di tre byte
- tratta i tre byte come gruppi di 24 bit.
- divide questi 24 bit in quattro gruppi di sei bit.
- cercare la lettera corrispondente per ogni gruppo di sei bit. Questo è il tuo risultato.
Puoi trovare la tabella di traduzione su tutto il Web, ad esempio qui: link
C'è un caso speciale: alla fine dei dati binari, potresti avere uno o due byte rimasti. Questo è il motivo per cui a volte vedi i segni = alla fine; indicano il riempimento.
Con questo in mente, il tuo testo originale in realtà non assomiglia a Base64. Potrebbe essere, ma non sembra plausibile. Le lunghe stringhe di 0 sono un omaggio. Invertire l'algoritmo sopra, ogni 0 indica il numero 52 (cercato nella tabella) o 110100 in binario. Quindi la sequenza 0000 corrisponderebbe al modello di bit 110100110100110100110100. Divido quello lungo i confini di otto bit per ottenere il binario originale, e ottieni questo:
11010011 01001101 00110100 o in esadecimale D34D34
Nei dati, vedere stringhe lunghe di valori pari a zero è molto più plausibile delle lunghe stringhe di D34D34. Ancora meno plausibile, i dati iniziano con undici anni - se questa fosse davvero una lunga serie di dati, ci si aspetterebbe multipli di quattro.