Base62 utilizza comunemente cifre e lettere maiuscole e minuscole. Ciò lo rende attraente per identificatori compatti senza punteggiatura. Base64 utilizza 64 simboli e impacchetta direttamente gruppi di bit. Sebbene i nomi siano simili, le implementazioni Base62 spesso modellano l'input come un numero, il che crea diverse domande di interoperabilità.
L'ordine alfabetico fa parte del formato
Due librerie Base62 possono scegliere ordini diversi per cifre, lettere maiuscole e lettere minuscole. La stessa stringa visibile rappresenta quindi numeri diversi. Un sistema che utilizza 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz non è d'accordo con quello che mette prima le lettere minuscole. Registrare l'alfabeto e testare i vettori nel protocollo; Il solo “Base62” non è sufficiente.
Anche la distinzione tra maiuscole e minuscole è importante. Un proxy minuscolo, un confronto di database senza distinzione tra maiuscole e minuscole o un identificatore normalizzato manualmente possono modificarne il valore. Se il livello di archiviazione ignora le maiuscole e minuscole, né Base62 ordinario né Base64 sono una rappresentazione sicura senza un'ulteriore decisione di progettazione.
Conserva la lunghezza durante la codifica dei byte
Considera due file contenenti esadecimale 01 e 0001. Interpretati come numeri interi senza segno, entrambi hanno valore uno. Una semplice conversione da intero a Base62 perde la distinzione. Un formato Base62 orientato ai byte necessita di una gestione esplicita dello zero iniziale o di un campo di lunghezza. Ciò è particolarmente rilevante per i token casuali e i valori crittografici a lunghezza fissa.
const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length
Scegli in base al significato del valore
Se si sta abbreviando un numero intero di database sotto il controllo di un'applicazione, può essere utile un alfabeto Base62 documentato. Se stai trasportando byte arbitrari tra sistemi indipendenti, Base64URL di solito fornisce un contratto standardizzato più chiaro. Sostituisce il trattino e il carattere di sottolineatura alla punteggiatura standard Base64 mantenendo lo stesso raggruppamento a sei bit.
La codifica non è randomizzazione. Gli interi sequenziali rimangono prevedibili dopo la conversione Base62. Se gli identificatori devono resistere alle ipotesi, generare un'entropia imprevedibile sufficiente utilizzando una fonte crittografica casuale, quindi codificare i byte risultanti senza perdere lunghezza. Non considerare un token dall’aspetto compatto come una prova che la sua generazione è sicura.
Quando confronti le dimensioni di output, includi prefissi, regole di riempimento ed eventuali metadati di lunghezza. Andare in andata e ritorno almeno un input vuoto, un byte zero, diversi zeri iniziali e un byte di valore alto. L'alfabeto Base64URL è standardizzato in RFC 4648; un'applicazione Base62 deve specificare essa stessa i dettagli aggiuntivi.