Anonymous View

Base64 Purkaja

/

Tietosi ovat 100-prosenttisen yksityisiä -- Base64 koodataan ja puretaan kokonaan laitteellasi.

Teksti
Base64

Mikä on Base64?#

Base64 on tapa esittää binääridataa pelkkänä tekstinä käyttäen 64 ASCII-merkkiä: A–Z, a–z, 0–9 sekä + ja /. Sen avulla binääridata, kuten kuvat, avaimet ja sähköpostiliitteet, voi kulkea turvallisesti tekstiä varten rakennettujen järjestelmien läpi. Kyseessä on koodaus, ei salaus.

Base64 käyttää kiinteää 64 merkin aakkosia. Jokainen arvo välillä 0–63 vastaa täsmälleen yhtä merkkiä – näin mikä tahansa 3 tavua binääriä muuttuu 4 luettavaksi merkiksi:

ArvotMerkit
0–25A–Z26 isoa kirjainta
26–51a–z26 pientä kirjainta
52–610–910 numeroa
62–63+ /2 symbolia

"="-merkki on ainoa poikkeus. Se on täytemerkki, ei yksi 64 arvosta, ja sen tehtävänä on täydentää viimeinen lohko.

Olet lähes varmasti törmännyt siihen jo. Base64 esiintyy kaikkialla, missä binääridata täytyy mahduttaa tekstin sisään:

  • Pienen kuvan tai ikonin upottaminen suoraan HTML- tai CSS-koodiin
  • Binääriblobien palauttaminen JSON API -vastauksessa
  • Sähköpostiliitteiden koodaaminen (MIME)
  • Avainten ja varmenteiden tallentaminen PEM-tiedostoihin

Data-URI-temppu näyttää tältä. Pitkä merkkijono on koko kuva:

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

Miksi Base64 on olemassa?#

Varhaiset verkkoprotokollat oli rakennettu tekstiä, ei raakoja tavuja varten. ASCII käytti 7 bittiä ja 128 merkkiä, mikä riitti englannille muttei binääridatalle. Jotkin järjestelmät muokkasivat ohjausmerkkejä tai kirjoittivat rivinvaihtoja uudelleen (LF → CR + LF), vioittaen äänettömästi kuvia ja ääntä siirron aikana.

Base64 kiertää kaiken tämän käyttämällä vain merkkejä, joista kaikki järjestelmät ovat samaa mieltä. Base16 ja Base32 tekevät saman työn pienemmillä aakkosilla, mutta Base64 pakkaa enemmän dataa per merkki pysyen silti turvallisena. Siksi se voitti.

Miten Base64-koodaus toimii#

Koko menetelmä perustuu yhteen toistuvaan ideaan: otetaan 3 tavua (24 bittiä), jaetaan ne uudelleen neljään 6-bittiseen ryhmään ja etsitään jokainen ryhmä aakkosista. Tässä sana "Logto" koodattuna käsin.

  1. Kirjoita jokainen merkki 8-bittisenä binäärinä käyttäen sen ASCII-koodia.
  2. Ota 3 tavua kerrallaan. Se on 24 bittiä.
  3. Jaa samat 24 bittiä uudelleen neljään 6-bitin ryhmään.
  4. Lue jokainen 6-bittinen ryhmä lukuna välillä 0–63.
  5. Etsi kyseinen luku aakkosista saadaksesi yhden merkin.
  6. Jos viimeinen tavujoukko ei täytä 3 tavua, täytä loput bitit nollilla ja lisää "=", jotta jokainen lohko pysyy 4 merkin pituisena.

Vaihe 1. Muunna jokainen merkki 8-bittiseksi binääriksi:

MerkkiASCII-koodiBinääri
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

Vaihe 2. Ota ensimmäiset kolme tavua, "Log", ja jaa samat 24 bittiä uudelleen neljään 6-bitin ryhmään:

8-bittiset tavut
01001100 01101111 01100111
6-bittiset ryhmät
010011 000110 111101 100111

Vaihe 3. Lue jokainen 6-bittinen ryhmä lukuna ja etsi se aakkosista:

6-bittinen ryhmäArvoBase64-merkki
01001119T
0001106G
111101619
10011139n

"Logto" on 5 tavua, ei 3:n monikerta. Kaksi viimeistä tavua, "to", jättävät jaon 6 + 6 + 4. Täytä viimeiset 4 bittiä nollilla muodostaaksesi 6-bittisen ryhmän, lisää sitten yksi "=" täydentämään 4-merkkinen lohko:

Yhdistä lohkot:

"Logto"  →  TG9ndG8=

Jokainen ohjelmointikieli sisältää tämän valmiina. Node.js:ssä:

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

Kolme sääntöä nousee esiin tästä prosessista, ja ne on hyvä pitää mielessä:

  • 3 sisään, 4 ulos: Tulosteen pituus on syöte pyöristettynä ylöspäin 4 merkin monikertaan, joten koodattu data on aina noin 33 % suurempaa.
  • "=" tarkoittaa täytettä: Se esiintyy vain, kun syöte ei ole 3 tavun monikerta.
  • Täyte laskee ylijäämätavut: Ei "=" tarkoittaa 3 tavun monikertaa, yksi "=" tarkoittaa 2 ylijäämätavua, kaksi "=" tarkoittaa 1 ylijäämätavua.

Milloin sinun pitäisi käyttää Base64:ää?#

Turvaudu Base64:ään, kun binääridata täytyy siirtää vain tekstiä tukevien kanavien kautta:

  • Upotetut resurssit: Upota pieni kuva tai fontti HTML/CSS:ään säästääksesi yhden pyynnön.
  • Vain tekstiä tukevat siirrot: Siirrä binääridata JSON:in, XML:n tai URL-kyselyparametrin sisällä.
  • Rajoitetut merkit: Siirrä dataa järjestelmien läpi, jotka eivät kestä ohjausmerkkejä.

Mitä saat vastineeksi:

  • Toimii kaikkialla: Mikä tahansa ASCII-yhteensopiva järjestelmä voi lukea sen ilman merkistöneuvottelua.
  • Mikään ei vioitu: Tuloste selviää kanavista, jotka muuten vahingoittaisivat raakoja tavuja.

URL-turvallinen Base64 (Base64URL)#

Tavallinen Base64 käyttää kolmea merkkiä, jotka ovat ristiriidassa URL-osoitteiden, kyselymerkkijonojen ja tiedostonimien toiminnan kanssa: +, / ja = täytemerkki. Liitä tavallinen Base64-merkkijono linkkiin, ja se voi rikkoutua huomaamattomasti:

  • + muuttuu välilyönniksi. Kyselymerkkijonossa monet palvelimet tulkitsevat + välilyönniksi. Joten ?data=ab+cd saapuu hiljaisesti muodossa "ab cd", ja tavut ovat väärin.
  • / on polkuerotin. Arvon sisällä oleva / voidaan tulkita uudeksi polkusegmentiksi, ja useimmat tiedostojärjestelmät hylkäävät sen tiedostonimessä suoraan.
  • = on myös varattu. Se erottaa avaimet arvoista kyselymerkkijonossa, joten loppussa olevat = täytemerkit poistetaan tai luetaan väärin.

Voit prosenttienkoodata ne (+ muuttuu %2B:ksi, / muuttuu %2F:ksi, = muuttuu %3D:ksi), mutta se paisuttaa merkkijonoa ja on helppo kaksinkertaisesti koodata vahingossa.

Base64URL (RFC 4648 §5) korjaa tämän lähteessä: vaihda + merkkiin -, vaihda / merkkiin _ ja jätä = täytemerkki pois. Tulos sopii suoraan URL-osoitteeseen, kyselyparametriin tai tiedostonimeen ilman mitään koodausta. Näet sitä URL-osoitteissa, tiedostonimissä ja monissa web-rajapinnoissa.

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

Rajoitukset (ja yksi suuri väärinkäsitys)#

Base64 on esitystapa, ei ilmainen lounas. Pidä kolme asiaa mielessä:

  • Se on ~33 % suurempaa: 3 tavua muuttuu 4 merkiksi, joten koodattu data kasvaa noin kolmanneksen.
  • Se kuluttaa suoritinta: Koodaus ja dekoodaus eivät ole ilmaisia suurilla volyymeilla tai suurilla sisällöillä.
  • Se on epäluettavaa: Läpinäkymättömät merkkijonot vaikeuttavat lokeja ja virheenjäljitystä.
Base64 ei ole salaus. Tämä on yleisin virhe. Base64 ei piilota mitään. Kuka tahansa voi purkaa sen yhdellä koodirivillä. Jos data on arkaluonteista, salaa se. Base64 muuttaa vain muotoa, ei koskaan sitä, kuka voi lukea sen.

Usein kysytyt kysymykset#

Onko Base64 salaus tai turvallinen?

Ei. Se on palautettavissa oleva koodaus julkisilla aakkosilla, joten kuka tahansa voi purkaa sen välittömästi, eikä se tarjoa lainkaan luottamuksellisuutta. Salaa arkaluonteinen data sen sijaan.

Miksi Base64-merkkijononi on noin 33 % suurempi?

Base64 muuttaa jokaisen 3 tavun 4 merkiksi, joten koodattu muoto on aina noin kolmanneksen suurempi kuin alkuperäiset tavut.

Mitä lopussa olevat "="-merkit tarkoittavat?

Ne ovat täytemerkkejä, jotka pitävät tulosteen 4 merkin monikertana. Yksi "=" tarkoittaa, että syötteessä oli 2 ylijäämätavua; kaksi "=" tarkoittaa 1; ei "=" tarkoittaa, että pituus oli jo 3 tavun monikerta.

Mikä ero on Base64:n ja Base64URL:n välillä?

Base64URL on sama koodaus URL- ja tiedostonimiturvallisilla aakkosilla: - ja _ korvaavat + ja /, ja = täytemerkki jätetään yleensä pois. Se on yleinen URL-osoitteissa, tiedostonimissä ja monissa web-rajapinnoissa.

Voiko Base64 koodata minkä tahansa tiedoston vai vain tekstin?

Mitä tahansa binääriä: kuvia, PDF-tiedostoja, avaimia, suoritettavia tiedostoja. Base64 toimii raakojen tavujen kanssa, joten alkuperäisellä sisältötyypillä ei ole merkitystä.

Lähettääkö tämä työkalu datani jonnekin?

Ei. Koodaus ja dekoodaus suoritetaan kokonaan selaimessasi. Mitään liittämääsi ei ladata tai kirjata lokiin.

Avaa enemmän Logto Cloudilla