Base62 versus Base64: identificatiegegevens zijn geen willekeurige bytestromen

Ontdek waarom de Base62-alfabetvolgorde en regels met voorloopnul ertoe doen, en wanneer Base64URL een beter uitwisselingsformaat is.

Base62 gebruikt gewoonlijk cijfers en hoofdletters en kleine letters. Dat maakt het aantrekkelijk voor compacte identificatiegegevens zonder interpunctie. Base64 gebruikt 64 symbolen en verpakt groepen bits rechtstreeks. Hoewel de namen vergelijkbaar zijn, modelleren Base62-implementaties de invoer vaak als een getal, wat verschillende interoperabiliteitsvragen oproept.

De alfabetvolgorde maakt deel uit van het formaat

Twee Base62-bibliotheken kunnen verschillende volgordes kiezen voor cijfers, hoofdletters en kleine letters. Dezelfde zichtbare string vertegenwoordigt dan verschillende getallen. Een systeem dat gebruik maakt van 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz is het niet eens met een tekst waarin kleine letters eerst worden geplaatst. Noteer het alfabet en testvectoren in het protocol; “Base62” alleen is niet genoeg.

Hoofdlettergevoeligheid is ook van belang. Een proxy in kleine letters, een niet-hoofdlettergevoelige databasesortering of een handmatig genormaliseerde identificatie kan de waarde ervan wijzigen. Als uw opslaglaag hoofdlettergebruik negeert, is noch de gewone Base62, noch Base64 een veilige weergave zonder een aanvullende ontwerpbeslissing.

Behoud lengte bij het coderen van bytes

Beschouw twee bestanden die hexadecimaal bevatten 01 en 0001. Geïnterpreteerd als gehele getallen zonder teken, hebben beide waarde één. Een kale conversie van geheel getal naar Base62 verliest het onderscheid. Een byte-georiënteerd Base62-formaat heeft expliciete afhandeling van voorloopnullen of een lengteveld nodig. Dit is vooral relevant voor willekeurige tokens en cryptografische waarden met een vaste lengte.

const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length

Kies op basis van wat de waarde betekent

Als u een database-geheel getal onder controle van één applicatie inkort, kan een gedocumenteerd Base62-alfabet handig zijn. Als u willekeurige bytes tussen onafhankelijke systemen transporteert, biedt Base64URL doorgaans een duidelijker gestandaardiseerd contract. Het vervangt streepjes en onderstrepingstekens voor de standaard interpunctie Base64, terwijl dezelfde zes-bits groepering behouden blijft.

Coderen is geen randomisatie. Opeenvolgende gehele getallen blijven voorspelbaar na Base62-conversie. Als identificatiegegevens het raden moeten weerstaan, genereer dan voldoende onvoorspelbare entropie met behulp van een cryptografische willekeurige bron en codeer vervolgens de resulterende bytes zonder lengte te verliezen. Beschouw een compact uitziend token niet als bewijs dat het genereren ervan veilig is.

Wanneer u uitvoergroottes vergelijkt, neem dan voorvoegsels, opvulregels en metagegevens over de lengte op. Roundtrip minimaal een lege ingang, een nulbyte, meerdere voorloopnullen en een byte met hoge waarde. Het Base64URL-alfabet is gestandaardiseerd in RFC 4648; een Base62-applicatie moet zelf de aanvullende gegevens opgeven.