Base64 je standard pro kódování binárních dat pomocí pouze 64 znaků ASCII . Kódovací abeceda obsahuje latinské znaky AZ, az, čísla 0-9 (celkem 62 znaků) a 2 další znaky v závislosti na implementačním systému. Každé 3 původní bajty jsou zakódovány 4 znaky (přírůstek o ¹⁄₃).
Tento systém je široce používán v e-mailu k reprezentaci binárních souborů v těle e-mailu ( kódování transportu ).
V e-mailovém formátu MIME Base64 se jedná o schéma, které převádí libovolnou sekvenci bajtů na sekvenci tisknutelných znaků ASCII .
Standardních 62 znaků je doplněno +o , /a = jako speciální příponový kód.
Kompletní specifikace této formy Base64 se nachází v RFC 1421 a RFC 2045 . Toto schéma se používá ke kódování sekvence oktetů ( bajtů ).
Aby bylo možné převést data na Base64, je první bajt umístěn do nejvýznamnějších osmi bitů 24bitové vyrovnávací paměti, další do prostředních osmi a třetí do nejméně významných osmi bitů. Pokud jsou zakódovány méně než tři bajty, pak jsou odpovídající bity vyrovnávací paměti nastaveny na nulu. Potom se každých šest bitů vyrovnávací paměti, počínaje těmi nejvýznamnějšími, použije jako index řetězce "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" a jeho znaky, na které indexy ukazují, se umístí do výstupního řetězce. Pokud je zakódován pouze jeden nebo dva bajty, výsledkem jsou pouze první dva nebo tři znaky řetězce a výstupní řetězec je doplněn dvěma nebo jedním znakem =. Tím se zabrání přidávání dalších bitů do obnovených dat. Proces se opakuje na zbývajících vstupních datech.
Například citát z Leviathana od Thomase Hobbese :
Člověk se odlišuje nejen svým rozumem, ale i touto jedinečnou vášní od jiných zvířat, což je chtíč mysli, která vytrvalostí rozkoše v neustálém a neúnavném generování znalostí přesahuje krátkou prudkost jakékoli tělesné rozkoše. .při převodu z ASCII na Base64 vypadá takto:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0 aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1 c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0 aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=V příkladu je slovo Man zakódováno jako TWFu. Proces převodu lze znázornit jako následující tabulka:
Zdrojový text | M | A | n | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII kódy | 77 (0x4d) | 97 (0x61) | 110 (0x6e) | |||||||||||||||||||||
Binární pohled | 0 | jeden | 0 | 0 | jeden | jeden | 0 | jeden | 0 | jeden | jeden | 0 | 0 | 0 | 0 | jeden | 0 | jeden | jeden | 0 | jeden | jeden | jeden | 0 |
Přijatý index v Base64 | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Konečný výsledek v Base64 | T | W | F | u |
Symbol | Význam | Symbol | Význam | Symbol | Význam | Symbol | Význam | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
deset | 2 | osm | 16 | deset | 2 | osm | 16 | deset | 2 | osm | 16 | deset | 2 | osm | 16 | |||||||
A | 0 | 000 000 | 00 | 00 | Q | 16 | 010 000 | dvacet | deset | G | 32 | 100 000 | 40 | dvacet | w | 48 | 110 000 | 60 | třicet | |||
B | jeden | 000001 | 01 | 01 | R | 17 | 010001 | 21 | jedenáct | h | 33 | 100 001 | 41 | 21 | X | 49 | 110001 | 61 | 31 | |||
C | 2 | 000010 | 02 | 02 | S | osmnáct | 010010 | 22 | 12 | i | 34 | 100010 | 42 | 22 | y | padesáti | 110010 | 62 | 32 | |||
D | 3 | 000011 | 03 | 03 | T | 19 | 010011 | 23 | 13 | j | 35 | 100011 | 43 | 23 | z | 51 | 110011 | 63 | 33 | |||
E | čtyři | 000100 | 04 | 04 | U | dvacet | 010100 | 24 | čtrnáct | k | 36 | 100100 | 44 | 24 | 0 | 52 | 110100 | 64 | 34 | |||
F | 5 | 000101 | 05 | 05 | PROTI | 21 | 010101 | 25 | patnáct | l | 37 | 100101 | 45 | 25 | jeden | 53 | 110101 | 65 | 35 | |||
G | 6 | 000110 | 06 | 06 | W | 22 | 010110 | 26 | 16 | m | 38 | 100110 | 46 | 26 | 2 | 54 | 110110 | 66 | 36 | |||
H | 7 | 000111 | 07 | 07 | X | 23 | 010111 | 27 | 17 | n | 39 | 100111 | 47 | 27 | 3 | 55 | 110111 | 67 | 37 | |||
já | osm | 001000 | deset | 08 | Y | 24 | 011000 | třicet | osmnáct | Ó | 40 | 101 000 | padesáti | 28 | čtyři | 56 | 111 000 | 70 | 38 | |||
J | 9 | 001001 | jedenáct | 09 | Z | 25 | 011001 | 31 | 19 | p | 41 | 101001 | 51 | 29 | 5 | 57 | 111001 | 71 | 39 | |||
K | deset | 001010 | 12 | 0A | A | 26 | 011010 | 32 | 1A | q | 42 | 101010 | 52 | 2A | 6 | 58 | 111010 | 72 | 3A | |||
L | jedenáct | 001011 | 13 | 0B | b | 27 | 011011 | 33 | 1B | r | 43 | 101011 | 53 | 2B | 7 | 59 | 111011 | 73 | 3B | |||
M | 12 | 001100 | čtrnáct | 0C | C | 28 | 011100 | 34 | 1C | s | 44 | 101100 | 54 | 2C | osm | 60 | 111100 | 74 | 3C | |||
N | 13 | 001101 | patnáct | 0D | d | 29 | 011101 | 35 | 1D | t | 45 | 101101 | 55 | 2D | 9 | 61 | 111101 | 75 | 3D | |||
Ó | čtrnáct | 001110 | 16 | 0E | E | třicet | 011110 | 36 | 1E | u | 46 | 101110 | 56 | 2E | + | 62 | 111110 | 76 | 3E | |||
P | patnáct | 001111 | 17 | 0F | F | 31 | 011111 | 37 | 1F | proti | 47 | 101111 | 57 | 2F | / | 63 | 111111 | 77 | 3F |
UTF-7 je upravená verze Base64. Toto schéma kódování se používá pro soubory UTF-16 jako meziformát v MIME. UTF-7 je určeno pro použití s unicode v e-mailu bez kódování přenosu obsahu. Hlavní rozdíl mezi touto variantou Base64 a MIME spočívá v tom, že znak =se nepoužívá pro výplň, protože znak je třeba několikrát escapovat. Místo toho jsou bity oktetu doplněny nulami.
Upravený Base64 je standardizován podle RFC 2152 ( Mail-Safe Transformation Format of Unicode ).
V protokolu server-to-server používaném IRC a kompatibilním softwarem se verze Base64 používá ke kódování číselných a binárních IP adres klient/server. Číselná data klienta a serveru mají pevnou velikost, která přesně odpovídá počtu znaků Base64, takže není potřeba vyplňování. Binární IP adresy jsou rozšířeny o úvodní nulové bity, aby odpovídaly. Znaková sada se mírně liší od MIME tím, že []místo +/.
Díky Base64 lze binární obsah zahrnout do html dokumentů a vytvořit tak jeden dokument bez samostatných obrázků a dalších doplňkových souborů. HTML dokument s grafikou, zvukem, videem, programy, styly a dalšími doplňky se tak stává vynikající alternativou k jiným formátům složitých dokumentů, jako jsou doc, docx, pdf.
Některé aplikace kódují binární data pro snadné zahrnutí do adres URL, skrytých polí formuláře.
Použití kodéru URL přes standard Base64 není vždy pohodlné, protože převádí znaky /a +na speciální hexadecimální sekvence. Ačkoli je tento převod reverzibilní, prodlužuje řetězec a ztěžuje jeho pozdější analýzu. Znak %vygenerovaný kodérem URL může být navíc potřeba znovu escapovat při předávání výsledného řetězce jinými systémy (například v SQL jde o prvek šablony).
Z tohoto důvodu je upraven Base64 pro URL , kde se nepoužívá výplň znaků =a symboly a jsou nahrazeny +a resp . Proto použití kodérů/dekodérů URL již není nutné a nemá žádný vliv na délku zakódované hodnoty, takže stejná zakódovaná forma zůstává nedotčená pro použití v relačních databázích, webových formulářích a identifikátorech objektů obecně. Base64 kódování URL rozpozná variantu, když jsou znaky nahrazeny a ( RFC 3548 , sekce 4). /*-+/-_
Druhá varianta se nazývá upravená Base64 pro regulární výrazy a použití !a -místo *a -, nahrazuje standardní Base64 +/, protože obojí +a *může být vyhrazeno pro regulární výrazy (všimněte si, že []použité výše ve variantě IRCu nemusí v tomto kontextu fungovat) .
Existují další možnosti, které používají _a -nebo .a _pokud má být řetězec Base64 použit ve spojení s identifikátory pro programy nebo .a -pro použití v tokenech názvů XML ( Nmtoken ) nebo _v :omezenějších identifikátorech XML ( Name ). V některých případech URL používá Base58 , který nepoužívá znaky +a /.
Base58 se používá ke kódování URL v některých systémech, které se liší od Base64 absencí znaků v konečném textu, které může osoba vnímat nejednoznačně. 0 (nula), O (velké latinské o ), I (velké latinské i ), l (malé latinské L ) jsou vyloučeny . Vyloučeny jsou také znaky + (plus) a / (lomítko), které při kódování adresy URL mohou vést k nesprávné interpretaci adresy.
Radix-64 je variací Base64 kódování binárních dat do textového formátu používaného v PGP . Od Base64 se liší tím, že na konec je přidán 24bitový kontrolní součet .
Operační systémy založené na Unixu ukládají hash hesel vypočítaný pomocí šifrování v souboru /etc/passwd pomocí kódování B64 . Je podobný Radix-64, ale =nepoužívá se přípona zarovnání a v abecedě jsou na začátek umístěny neabecední znaky: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.
Base64 má mnoho využití. Například Thunderbird a Mozilla Suite používaly Base64 ke skrytí hesel v POP3 . Base64 lze použít jako metodu ke skrytí tajemství bez režie správy kryptografických klíčů , avšak tento přístup je zcela nejistý a nedoporučuje se.
Spamové skenery , které nedekódují zprávy do Base64, je často zmeškají, protože takové zprávy se zdají být natolik náhodné, že je lze zaměnit za spam. Toho využívají spameři k obcházení základních antispamových nástrojů.
Tento standard se používá ke kódování obrázků JPEG a PNG, k jejich vkládání do e-knih FB2 [1] .
Existují aplikace, které používají kódování Base64 k odesílání malých obrázků prostřednictvím dlouhých SMS [2] .
Serializace digitálních datových formátů | |
---|---|
Text | |
Internet a telekomunikace |
|
Média | |
jiný |