Base64-codering uitgelegd: wat het is en wanneer u het moet gebruiken
Base64 is overal aanwezig in de webontwikkeling: ingebed in e-mailheaders, ingebakken in gegevens-URI's, gebruikt in authenticatietokens en om binaire bestanden gewikkeld in tekstprotocollen. Maar wat is het eigenlijk? En als het gegevens versleutelt, is het dan niet veilig? Het antwoord is nee: Base64 codeert, niet encryptie. Het is een manier om binaire of willekeurige gegevens weer te geven als gewone ASCII-tekst, meer niet. Als u begrijpt wanneer en waarom u het moet gebruiken, kan dit veel verwarrende momenten in de ontwikkeling verhelderen.
Wat is Base64?
Base64 is een methode voor het coderen van binaire gegevens in 64 veilige ASCII-tekens: de letters A–Z, a–z, cijfers 0–9, plustekens en schuine strepen. Het werkt door binaire invoer (of het nu tekst, afbeeldingen of onbewerkte bytes is) te nemen en deze in stukjes van 6 bits te verdelen. Elk deel wordt een index in het Base64-alfabet, zodat de uitvoer altijd leesbare tekst is. De "64" verwijst naar de alfabetgrootte: 26 + 26 + 10 + 2 = 64 tekens.
Waarom 64? Omdat deze tekens veilig zijn op vrijwel alle systemen: e-mail, oude terminals, XML, JSON en platte tekst. Een binair bestand kan tijdens het transport beschadigd raken als speciale bytes verkeerd worden geïnterpreteerd; Base64 garandeert dat de uitvoer onveranderd blijft via elk op tekst gebaseerd kanaal. Dat kan coderen en decoderen van Base64 direct in uw browser zonder uw gegevens ergens te uploaden.
Base64 is geen encryptie
Dit is het cruciale onderscheid: Base64 verwart de weergave van gegevens, maar iedereen kan dit ongedaan maken. Als u het wachtwoord met Base64 codeert secret123, het wordt c2VjcmV0MTIz – maar dat is niet veilig. Decoderen is net zo triviaal. Base64 is verduistering voor transmissie, geen bescherming voor beveiliging. Als u gegevens geheim wilt houden, gebruik dan encryptie (zoals AES), niet Base64. Base64 is de manier waarop u veilig gecodeerde gegevens via een tekstkanaal verzendt, maar het is niet de codering zelf.
Veelvoorkomend gebruik van Base64
Base64 is standaard in verschillende praktijkscenario's:
- Gegevens-URI's. In plaats van te linken naar een afbeeldingsbestand, kunt u de afbeelding rechtstreeks in HTML of CSS insluiten als gegevens-URI:
data:image/png;base64,iVBORw0KG…. Dit vermijdt een extra HTTP-verzoek, handig voor kleine pictogrammen of wanneer assets niet afzonderlijk kunnen worden gehost. - E-mailbijlagen. SMTP (e-mailprotocol) is ontworpen voor tekst. Binaire bijlagen worden vóór verzending met Base64 gecodeerd en bij ontvangst gedecodeerd door uw e-mailclient.
- Authenticatietokens. Veel API's gebruiken Base64 voor tokens – niet voor de veiligheid, maar omdat tokens vaak binaire gegevens zijn die als leesbare tekst in headers of URL's moeten worden verzonden.
- Bestanden insluiten in JSON of XML. Als u een binaire blob (een pdf, een spreadsheet, een archief) moet opnemen in een JSON API-antwoord, codeert Base64 deze als een tekenreeks die de JSON-structuur niet verbreekt.
De omvang van de overhead: Base64 maakt data groter
Een nadeel: de Base64-uitvoer is ongeveer 33% groter dan die van het originele binaire bestand. Dit komt omdat je 8 bits invoer in stukken van 6 bits verpakt, en opvulling nodig is als de invoerlengte geen veelvoud van 3 is. Dus als je een afbeelding van 300 KB insluit als een gegevens-URI, is de Base64-versie ongeveer 400 KB - langzamer om te laden en te parseren. Voor kleine pictogrammen is deze overhead het opgeslagen HTTP-verzoek waard; voor grote bestanden is het meestal beter om ze afzonderlijk te koppelen.
Varianten en gerelateerde coderingen
Standaard Base64-gebruik + En /, die een speciale betekenis hebben in URL's en bestandsnamen. URL-veilige Base64 vervangers - En _ in plaats daarvan wordt het veilig gemaakt voor gebruik in paden en queryreeksen zonder procentuele codering. Als u een aangepast URL-coderingsschema samenstelt, overweeg dan of dit het geval is URL-codering of URL-veilige Base64 past bij uw behoefte.
Base64 is een van de vele coderingen die verschillende problemen oplossen. Hexadecimale codering vertegenwoordigt binair als twee leesbare tekens per byte (langzamer te decoderen, maar geen opvulling en voor mensen leesbaar), vaak gebruikt in hashes en checksums. HTML-entiteiten speciale tekens coderen, zoals < En & zodat ze correct worden weergegeven op webpagina's - een ander probleem dan willekeurig binair transport. Elke codering is een hulpmiddel voor een specifieke taak.