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.

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 2012-10-05