base 64 kódolás

Sziasztok!

Bocsi, hogy új topicot indítok, de szükséges...
El tudja valaki magyarázni a base64 (vagy másik nevén a mime 64) kódolás algoritmusát? Próbálgattam kitalálni, de ha lehet, még jobban belegabajodtam.

Előre is köszönöm!

Üdv.: Stage81

Hozzászólások

Base64: http://www.ietf.org/rfc/rfc2045.txt, 6.8-as pont, 23.-25. oldal.

Nagyjából annyi, hogy mivel a natív 8-bites értékeket karakterként sok helyen nehéz átvinni (pl. a 0, a sorvég, stb. szokott zavarni), a hexdump eléggé pazarló (2 byte-on ábrázol 1-et), viszont van 64 olyan karakter, ami simán átmegy (pl. betűk, számok), ezért kell egy módszer, ami ezekkel ábrázolja a számokat. 64 lehetőség, az 6 biten írható le, azaz 8bites számokat kell 6bitesekkel ábrázolni, mondjuk 3 db 8bitest 4 db 6bitesen.
Pl. azt mondom, hogy "Hello", az hexában 48, 65, 6c, 6c, 6f, binárisan pedig:
01001000 01100101 01101100 01101100 01101111
ugyanez 6 bites csoportokra formázva:
010010 000110 010101 101100 011011 000110 1111xx, ahol az utolsó két x csak kitöltő nulla.
Ez decimális számokként: 12, 6, 21, 44, 29, 6, 60
Ezt kéne nyomtatható (átvihető) betűkkel ábrázolni, erre van egy helyettesítési táblázat az rfc-ben, eszerint ez: SGVsbG8
Mivel azonban a base64 alapvetően 3 byte-os egységet kódol 4 byte-osakra, az eredménynek 4 többszöröse számú karakterből kell állnia, a végén hiányzóakat '='-kkel kell feltölteni.
Ezzel tehát a 'Hello' base64-ben: 'SGVsbG8='

Kísérletezéshez (ha van fenn perl-ed) érdemes csinálni két alias-t:


alias b64d='perl -MMIME::Base64 -ne '\''print decode_base64($_)'\'''
alias b64e='perl -MMIME::Base64 -0777 -ne '\''print encode_base64($_)'\'''

Ezekkel aztán lehet játszani, pl.:


fules@chaos:~$ echo -n "Hello" | b64e
SGVsbG8=
fules@chaos:~$ echo -n "SGVsbG8=" | b64d
Hellofules@chaos:~$

U29rIHN6ZXJlbmNzZXQgOik=

Sőt. Debian Sarge-ba van mimecodecs nevű csomi, ahol nincs ott a következőt kell tenni:

Meg kell keresni, hogy az adott rendszerben az Emacs VM pluginját minek hívják (az emacs-vmtől a sima vm-en át bárminek hívhatják). Ennek a csominak meg kell szerezni a forrását. Kicsomizod, és


make base64-encode base64-decode

Az elkészült binárisokat fel kell másolni valahova és csá.
A C forrás pedig tanulságos is lehet (base64-encode.c és base64-decode.c)