Kódování Base64
Teorie k realizaci Base64 dekodéru:
Base64 je formát pro uložení binárního souboru tak, aby výsledný textový soubor
obsahoval pouze základní tisknutelné znaky. (Je využito např. u příloh v emailu,
kde je při odesílání podporován pouze textový způsob komunikace tj. 7bit
ASCII).
Vaším úkolem je implementovat dekodér formátu Base64 a pomocí něj rozkódovat připravenou zprávu. Při řešení úkolu si procvičíte práci s řetězci, operace bitového posuvu a bitového maskování.
Popis formátu Base64:
Formát kóduje vždy 3 osmibitové znaky/bajty na 4 znaky z množiny 64 znaků,
proto Base64. Množina 64 znaků obsahuje tyto znaky:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Princip kódování popisuje nákres níže, kde jsou vždy 3 osmibitové znaky původní zprávy rozděleny na 4 skupiny po 6 bitech. Jednotlivé skupiny po 6 bitech (tj. 64 kombinací) potom představuji vždy index do základní Base64 množiny, ze které je následně vybrán znak na pozici indexu.
Vstupní zpráva (tři 8bitové hodnoty):
X7X6X5X4X3X2X1X0 |
Y7Y6Y5Y4Y3Y2Y1Y0 |
Z7Z6Z5Z4Z3Z2Z1Z0 |
Výsledná zakódovaná zpráva (čtyři 6bitové hodnoty, následně převedené na čtyři znaky Base64):
X7X6X5X4X3X2 |
X1X0Y7Y6Y5Y4 |
Y3Y2Y1Y0Z7Z6 |
Z5Z4Z3Z2Z1Z0 |
Zakončovací (zarovnávací) sekvence:
Vstupní (kódovaný) soubor je vždy čten po 3 znacích (bajtech) a na výstup jsou
vždy odeslány 4 znaky. Proto je třeba pro soubory délky nedělitelné bezezbytku třemi,
doplnit na vstupní straně chybějící znaky (doplňuje se vždy znak s hodnotou \0) a na výstupní straně odlišit doplněné
znaky od původních (znak =). Tímto je zajištěno, že správně zakódovaná zpráva má
počet znaků vždy dělitelný čtyřmi a zároveň je možné určit přesnou velikost
původního souboru.
Příklady koncového zarovnání na výstupní délku čtyř znaků v případě chybějících bajtů na vstupu:
Vstup (pouze jedna 8bitová hodnota / bajt):
X7X6X5X4X3X2X1X0 |
Výstup (dvě 6bitové hodnoty převedené na Base64 znaky a dva doplňující znaky =):
X7X6X5X4X3X2 |
X1X00000 |
= |
= |
Vstup (pouze dvě 8bitové hodnoty / bajty):
X7X6X5X4X3X2X1X0 |
Y7Y6Y5Y4Y3Y2Y1Y0 |
Výstup (tři 6bitové hodnoty převedené na Base64 znaky a jeden doplňující znak =):
X7X6X5X4X3X2 |
X1X0Y7Y6Y5Y4 |
Y3Y2Y1Y000 |
= |
Zadání base64 dekodér:
Sestavte program v jazyce C, který správně rozkóduje zadaný textový soubor.
1. Navrhněte strukturu funkcí programu.
2. Navrhněte a implementujte funkci pro převod znaku Base64 znaku na jeho index v množině povolených znaků.
3. Navrhněte a implementujte funkci pro dekódování (čtveřice 6bitových znaku na 3 osmibitové).
4. Využijte tuto funkci při postupné konverzi vstupní souboru.
5. Ošetřete chybové stavy.
6. Ověřte, že daný program umožňuje dekódovat i zakódované binární soubory.
Testovací zpráva:
Využijte soubor získaný na adrese:
http://www.uamt.feec.vutbr.cz/~petyovsky/vyuka/bppc/base64/base64_message.php
Případně testovací text:
KiogVG90byBqZSB6YWtvZG92YW5hIHpwcmF2YSAqKgpQb2t1ZCBqc2kgamkgc3ByYXZuZSByb3prb2Rv
dmFsLCByZWtuaSBuYWhsYXM6CiJIZWxlIHZlbmt1IHByc2k/IgoqKiogS29uZWMgenByYXZ5ICoqCg==
Literatura:
http://cs.wikipedia.org/wiki/Base64
http://en.wikipedia.org/wiki/Base64
Poslední úpravy 2013-10-10