Base64 Avkodare

/

Dina data är 100 % privata -- Base64 kodas och avkodas helt och hållet på din enhet.

Vanlig text
Base64

Vad är Base64?#

Base64 är ett sätt att representera binär data som vanlig text med hjälp av 64 ASCII-tecken: A–Z, a–z, 0–9, plus + och /. Det gör att binärdata som bilder, nycklar och e-postbilagor kan färdas säkert genom system som är byggda för text. Det är kodning, inte kryptering.

Base64 använder ett fast alfabet med 64 tecken. Varje värde från 0 till 63 mappas till exakt ett av dem, och det är så 3 byte binärdata blir 4 läsbara tecken:

VärdenTecken
0–25A–Z26 versaler
26–51a–z26 gemener
52–610–910 siffror
62–63+ /2 symboler

Tecknet "=" är det enda undantaget. Det är utfyllnad, inte ett av de 64 värdena, och används bara för att fylla ut det sista blocket.

Du har nästan säkert sett det redan. Base64 dyker upp överallt där binärdata behöver transporteras inuti text:

  • Infoga en liten bild eller ikon direkt i HTML eller CSS
  • Returnera binära blobbar i ett JSON API-svar
  • Koda e-postbilagor (MIME)
  • Lagra nycklar och certifikat i PEM-filer

Det där data-URI-tricket ser ut så här. Den långa strängen är hela bilden:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

Varför finns Base64?#

Tidiga nätverksprotokoll var byggda för text, inte råbyte. ASCII använde 7 bitar och 128 tecken, vilket fungerade för engelska men inte för binärdata. Vissa system skadade kontrolltecken eller skrev om radslut (LF till CR + LF), vilket i tysthet korrupterade bilder och ljud under överföring.

Base64 kringgår allt det här genom att bara använda tecken som alla system redan är överens om. Base16 och Base32 gör samma jobb med mindre alfabet, men Base64 packar mer data per tecken och håller sig ändå säker. Det är därför det vann.

Hur Base64-kodning fungerar#

Hela upplägget är en idé på upprepning: ta 3 byte (24 bitar), dela om dem i fyra 6-bitarsgrupper och slå upp varje grupp i alfabetet. Här är ordet "Logto", kodat för hand.

  1. Skriv varje tecken som dess 8-bitars binär, med ASCII-koden.
  2. Ta 3 byte i taget. Det är 24 bitar.
  3. Dela om samma 24 bitar i fyra grupper om 6 bitar.
  4. Läs varje 6-bitarsgrupp som ett tal från 0 till 63.
  5. Slå upp det talet i alfabetet för att få ett tecken.
  6. Om den sista delen av byte inte når 3, fyll ut de återstående bitarna med nollor och lägg till "=" så att varje block förblir 4 tecken.

Steg 1. Omvandla varje tecken till dess 8-bitars binär:

TeckenASCII-kodBinär
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

Steg 2. Ta de första tre byten, "Log", och dela om samma 24 bitar i fyra 6-bitarsgrupper:

8-bitarsbyte
01001100 01101111 01100111
6-bitarsgrupper
010011 000110 111101 100111

Steg 3. Läs varje 6-bitarsgrupp som ett tal och slå upp talet i alfabetet:

6-bitarsgruppVärdeBase64-tecken
01001119T
0001106G
111101619
10011139n

"Logto" är 5 byte, inte en multipel av 3. De sista två byten, "to", ger en 6 + 6 + 4-delning. Fyll ut de sista 4 bitarna med nollor för att bilda en 6-bitarsgrupp, lägg sedan till ett "=" för att slutföra 4-teckensblocket:

Sätt ihop blocken:

"Logto"  →  TG9ndG8=

Varje språk levereras med detta inbyggt. I Node.js:

const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=

Tre regler följer av det här processen, värda att ha i åtanke:

  • 3 in, 4 ut: Utdatalängden är indata avrundat uppåt till en multipel av 4 tecken, så kodad data är alltid ungefär 33% större.
  • "=" betyder utfyllnad: Det förekommer bara när indata inte är en multipel av 3 byte.
  • Utfyllnad räknar resterna: Inget "=" betyder en multipel av 3 byte, ett "=" betyder 2 överblivna byte, två "=" betyder 1 överblivet byte.

När ska du använda Base64?#

Använd Base64 när binärdata måste passera genom en kanal som bara hanterar text:

  • Infogade resurser: Bädda in en liten bild eller ett teckensnitt i HTML/CSS för att spara en begäran.
  • Textbaserade transporter: Placera binärdata inuti JSON, XML eller en URL-frågeparameter.
  • Begränsade tecken: Flytta data genom system som inte klarar av kontrolltecken.

Vad du får i gengäld:

  • Det fungerar överallt: Alla ASCII-kapabla system kan läsa det, utan teckenuppsättningsförhandling.
  • Ingenting skadas: Utdatan överlever kanaler som annars skulle skada råbyte.

URL-säker Base64 (Base64URL)#

Standard Base64 förlitar sig på tre tecken som krockar med hur URL:er, frågesträngar och filnamn fungerar: +, / och =-utfyllnaden. Stoppa in en vanlig Base64-sträng i en länk och det kan gå sönder på tysta sätt:

  • + blir ett mellanslag. I en frågesträng tolkar många servrar + som ett mellanslag. Så ?data=ab+cd anländer tyst som "ab cd", och byten är fel.
  • / är en sökvägsavgränsare. Ett / inuti ett värde kan tolkas som ett nytt sökvägssegment, och de flesta filsystem tillåter det inte i ett filnamn.
  • = är också reserverat. Det delar nycklar från värden i en frågesträng, så avslutande =-utfyllnad tas bort eller misstolkas.

Du kan procentkoda dem (+ blir %2B, / blir %2F, = blir %3D), men det gör strängen längre och är lätt att dubbelkoda av misstag.

Base64URL (RFC 4648 §5) löser detta vid källan: byt + mot -, byt / mot _, och utelämna =-utfyllnaden. Resultatet passar direkt in i en URL, frågeparameter eller filnamn utan något som behöver escapes. Du ser det i URL:er, filnamn och många webb-API:er.

const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8

Begränsningar (och ett stort missförstånd)#

Base64 är en representation, inte en gratis lunch. Håll tre saker i åtanke:

  • Det är ~33% större: 3 byte blir 4 tecken, så kodad data växer med ungefär en tredjedel.
  • Det kostar CPU: Kodning och avkodning är inte gratis vid hög volym eller stora nyttolaster.
  • Det är oläsligt: Ogenomskinliga strängar gör loggar och felsökning svårare.
Base64 är inte kryptering. Det här är misstaget folk gör mest. Base64 döljer ingenting. Vem som helst kan avkoda det på en rad. Om datan är känslig, kryptera den. Base64 ändrar bara formen, aldrig vem som kan läsa den.

Vanliga frågor#

Är Base64 kryptering eller säkert?

Nej. Det är reversibel kodning med ett offentligt alfabet, så vem som helst kan avkoda det direkt och det ger noll konfidentialitet. Kryptera känslig data istället.

Varför är min Base64-sträng ungefär 33% större?

Base64 omvandlar varje 3 byte till 4 tecken, så den kodade formen är alltid ungefär en tredjedel större än de ursprungliga byten.

Vad betyder "="-tecknen i slutet?

De är utfyllnad som håller utdata till en multipel av 4 tecken. Ett "=" betyder att indata hade 2 överblivna byte; två "=" betyder 1; inget "=" betyder att längden redan var en multipel av 3 byte.

Vad är skillnaden mellan Base64 och Base64URL?

Base64URL är samma kodning med ett URL- och filnamns-säkert alfabet: - och _ ersätter + och /, och =-utfyllnaden utelämnas vanligtvis. Det är vanligt i URL:er, filnamn och många webb-API:er.

Kan Base64 koda vilken fil som helst, eller bara text?

Vilken binärdata som helst: bilder, PDF:er, nycklar, körbara filer. Base64 arbetar på råbyte, så den ursprungliga innehållstypen spelar ingen roll.

Skickar det här verktyget min data någonstans?

Nej. Kodning och avkodning körs helt i din webbläsare. Ingenting du klistrar in laddas upp eller loggas.

Lås upp mer med Logto Cloud