Base62 powszechnie używa cyfr oraz wielkich i małych liter. To czyni go atrakcyjnym dla identyfikatorów kompaktowych bez znaków interpunkcyjnych. Base64 używa 64 symboli i bezpośrednio pakuje grupy bitów. Chociaż nazwy są podobne, implementacje Base62 często modelują dane wejściowe jako liczbę, co stwarza różne pytania dotyczące interoperacyjności.
Kolejność alfabetyczna jest częścią formatu
Dwie biblioteki Base62 mogą wybierać różną kolejność cyfr, wielkich i małych liter. Ten sam widoczny ciąg znaków reprezentuje wówczas różne liczby. System korzystający 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz nie zgadza się z tym, który stawia małe litery na pierwszym miejscu. Zapisz alfabet i wektory testowe w protokole; Samo „Base62” nie wystarczy.
Wrażliwość na wielkość liter też ma znaczenie. Serwer proxy pisany małymi literami, sortowanie bazy danych bez uwzględniania wielkości liter lub ręcznie znormalizowany identyfikator mogą zmienić jego wartość. Jeśli warstwa pamięci ignoruje wielkość liter, ani zwykły Base62, ani Base64 nie są bezpieczną reprezentacją bez dodatkowej decyzji projektowej.
Zachowaj długość podczas kodowania bajtów
Rozważmy dwa pliki zawierające zapis szesnastkowy 01 i 0001. Obie interpretowane jako liczby całkowite bez znaku mają wartość jeden. Sama konwersja liczby całkowitej na Base62 traci rozróżnienie. Zorientowany na bajty format Base62 wymaga jawnej obsługi zera wiodącego lub pola długości. Jest to szczególnie istotne w przypadku losowych tokenów i wartości kryptograficznych o stałej długości.
const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length
Wybierz w oparciu o znaczenie danej wartości
Jeśli skracasz liczbę całkowitą bazy danych pod kontrolą jednej aplikacji, wygodny może być udokumentowany alfabet Base62. Jeśli transportujesz dowolne bajty między niezależnymi systemami, Base64URL zwykle zapewnia jaśniejszy, standardowy kontrakt. Zastępuje myślnik i podkreślenie standardową interpunkcją Base64, zachowując to samo sześciobitowe grupowanie.
Kodowanie nie jest randomizacją. Kolejne liczby całkowite pozostają przewidywalne po konwersji Base62. Jeśli identyfikatory muszą być odporne na zgadywanie, wygeneruj wystarczającą nieprzewidywalną entropię przy użyciu losowego źródła kryptograficznego, a następnie zakoduj powstałe bajty bez utraty długości. Nie traktuj kompaktowo wyglądającego tokena jako dowodu, że jego wygenerowanie jest bezpieczne.
Porównując rozmiary wyjściowe, uwzględnij przedrostki, reguły dopełniania i metadane dotyczące dowolnej długości. Obrót co najmniej pustym wejściem, bajtem zerowym, kilkoma zerami wiodącymi i bajtem o wysokiej wartości. Alfabet Base64URL jest ustandaryzowany w RFC 4648; aplikacja Base62 musi sama określać dodatkowe szczegóły.