Base64
Base64 je kódování, které převádí binární data na posloupnosti tisknutelných znaků. Umožňuje přenos binárních dat kanály, které dovolují pouze přenos textů. Používá se například v rozšíření MIME pro přenos e-mailů původně 7bitovým poštovním systémem v Internetu. Je definováno v RFC 4648.
Base64 kóduje vždy tři oktety binárních dat pomocí čtyř ASCII znaků. Ke kódování používá 64prvkovou sadu znaků tvořenou velkými i malými písmeny anglické abecedy, číslicemi a znaky plus ('+') a lomítko ('/'). Pokud počet oktetů původních dat není dělitelný třemi, doplňuje na konec zakódovaného textu jedno nebo dvě rovnítka ('=').
Příklad
Například následující text:
- Nazdar, světe! Příliš žluťoučký kůň úpěl ďábelské ódy.
je (při reprezentaci v UTF-8) v MIME Base64 zakódován takto:
TmF6ZGFyLCBzdsSbdGUhIFDFmcOtbGnFoSDFvmx1xaVvdcSNa8O9IGvFr8WIIMO6cMSbbCDEj8Oh YmVsc2vDqSDDs2R5Lg==
Base64 se však používá v převážné míře k zakódování binárních dat, například multimédií.
Algoritmus base64
Z výše uvedeného příkladu je řetězec Naz
zakódován do řetězce TmF6
.
N
, a
, z
jsou zapsány v ASCII jako čísla 78
, 97
, 122
dekadicky, tedy ve dvojkové soustavě 01001110
, 01100001
, 01111010
. Tyto 3 bajty jsou spojeny do 24 bitů 010011100110000101111010
. Následně jsou rozděleny do skupin po 6 bitech (6 bitů reprezentuje 64 možných stavů) a převedeny do 4 čísel (24 = 6×4). Tato čísla jsou použita jako index do tabulky znaků:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
kde znaku "A" odpovídá index 0 a znaku "/" index 63.
znaky textu | N | a | z | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII hodnota | 78 | 97 | 122 | |||||||||||||||||||||
bity | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
index | 19 | 38 | 5 | 58 | ||||||||||||||||||||
base64 kódování | T | m | F | 6 |
Jak je uvedeno v daném příkladu s textovými daty, kódování base64 převede každé 3 původní bajty (v našem případě 3 znaky ASCII) na 4 kódované znaky ASCII. Pokud počet nevychází přesně na trojice, zakóduje se poslední jeden nebo dva znaky a přidají se dvě, respektive jedno rovnítko.
Vlastnosti base64
- Výsledný řetězec se skládá z tisknutelných znaků ASCII.
- Rozlišuje se velikost písmen.
- Nemá kontrolní mechanismus.
- Kódování probíhá binárně (neřeší se znakové kódování apod.).
- Base64 je binárně bezpečné.
- Délka výsledného řetězce se navýší o 33 %.