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
- 3578 megtekintés
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=
- A hozzászóláshoz be kell jelentkezni
Azt kell hogy mondjam, GSimon a király!
Trey, nincs valami pontozó lista, amin a legsegítőkészebb fórumtagokat lehet értékelni?
Ismét köszönöm a segítséged!
Üdv.:
Stage 81
- A hozzászóláshoz be kell jelentkezni
>> Kísérletezéshez (ha van fenn perl-ed)
ha nincs, openssl csak akad:
snq@drone:~$ echo -n "Hello" | openssl base64
SGVsbG8=
snq@drone:~$ echo "SGVsbG8=" | openssl base64 -d
Hello
egyszerű, public domain b64 implementáció, erősen kommentezett forrással
aHRoIDop
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni