Az uuencoding a bináris adatok szöveggé alakításának egy formája, amely a Mary Ann Horton által a kaliforniai Berkeley-i Egyetemen 1980-ban írt uuencode és uudecode Unix programokból ered, amelyek bináris adatokat kódolnak e-mail rendszerekben történő átvitelhez.

Az „uuencoding” név a Unix-to-Unix Copy kifejezésből származik, azaz az „Unix-to-Unix kódolás” egy biztonságos kódolás tetszőleges fájlok egyik Unix rendszerről egy másik Unix rendszerre történő átvitelére, de nincs garancia arra, hogy a közbenső linkek mind Unix rendszerek lennének. Mivel egy e-mail üzenet továbbítható különböző karakterkészletekkel rendelkező számítógépekre vagy számítógépeken keresztül, vagy olyan átviteli útvonalakon keresztül, amelyek nem 8 bitesek, vagy amelyeket nem 8 bitesek a programok kezelnek, egy bináris fájl e-mailben történő továbbítása a fájl sérülését okozhatja. Az ilyen adatoknak a legtöbb karakterkészletben közös karakterkészletbe kódolásával az ilyen adatfájlok kódolt formája valószínűleg nem „lefordításra” vagy sérülésre került, és így sértetlenül és változatlanul érkeztek meg a célállomásra. Az uudecode program megfordítja az uuencode hatását, pontosan újraalkotva az eredeti bináris fájlt. Az uuencode/decode népszerűvé vált bináris (és különösen tömörített) fájlok e-mailben történő küldésére és Usenet hírcsoportokba való közzétételére stb.

Mára nagyrészt felváltotta a MIME és az yEnc. A MIME segítségével az esetleg uuenkódolt fájlok Base64 kódolással kerülnek átvitelre.

Kódolt formátum Egy uuenkódolt fájl a következő fejléccel kezdődik: begin <mode> <file><newline> <mode> a fájl Unix fájlengedélyeit jelöli három oktális számjegyként (pl. 644, 744). Ennek jellemzően csak Unix-szerű operációs rendszereknél van jelentősége.

<file> a bináris adatok újra létrehozásakor használandó fájlnév.

<newline> egy új sor karaktert jelöl, amely minden sor lezárására szolgál.

Minden adatsor a következő formátumot használja: <length character><formatted characters><newline>

<length character> egy olyan karakter, amely az adott sorban kódolt adatbájtok számát jelzi. Ez egy ASCII karakter, amelyet úgy határozunk meg, hogy a tényleges bájtszámhoz 32-t adunk hozzá, az egyetlen kivétel a súlyos ékezet "`" (grave accent; ASCII kód 96), amely nulla bájtot jelent. Minden adatsor, kivéve az utolsót (ha az adathossz nem osztható 45-tel), 45 bájt kódolt adatot tartalmaz (60 karakter a kódolás után). Ezért a hosszértékek túlnyomó többsége 'M', (32 + 45 = ASCII kód 77 vagy "M").

<formatted characters> kódolt karakterek. A tényleges megvalósítással kapcsolatos további részletekért lásd a Formázási mechanizmus részt.

A fájl két sorral végződik: `<newline> end<newline>

Az utolsó előtti sor egy karakter is, amely a sor hosszát jelzi, ahol a záró ékezet nulla bájtot jelent.

Teljes fájlként a csak a Cat karaktereket tartalmazó cat.txt nevű egyszerű szövegfájl uuenkódolt kimenete a következő lenne: begin 644 cat.txt #0V%T ` end

A kezdő sor egy szabványos uuencode fejléc; a '#' azt jelzi, hogy a sor három karaktert kódol; az utolsó két sor minden uuencoded fájl végén jelenik meg.

Formázási mechanizmus Az uuenkódolás mechanizmusa minden 3 bájton a következőket ismétli, 4 nyomtatható karakterré kódolva azokat, ahol minden karakter egy radix-64 számjegyet jelöl: Kezdje 3 bájttal a forrásból, összesen 24 bittel. Ossza fel 4 6-bites csoportra, amelyek mindegyike egy 0 és 63 közötti értéket képvisel: bitek (00-05), (06-11), (12-17) és (18-23). Adjon hozzá 32-t mindegyik értékhez. A 32 hozzáadásával ez azt jelenti, hogy a lehetséges eredmények 32 (" " szóköz) és 95 ("_" aláhúzás) között lehetnek. A 96 ("`" súlyos ékezet), mint "különleges karakter", ennek a tartománynak a logikus kiterjesztése. Annak ellenére, hogy a szóköz karaktert a 0 érték kódolásaként dokumentálták, az olyan implementációk, mint a GNU sharutils, valójában a súlyos ékezet karaktert használják a fájl törzsében lévő nullák kódolására is, soha nem használva szóközt. Adja ki ezeknek a számoknak az ASCII megfelelőjét.

Ha a forrás hossza nem osztható 3-mal, akkor az utolsó 4 bájtos szakasz kitöltő bájtokat tartalmaz, hogy tisztán osztható legyen. Ezeket a bájtokat kivonjuk a sor <length character> részéből, hogy a dekóder ne fűzzön hozzá nem kívánt karaktereket a fájlhoz.

A uudecoding a fentiek fordítottja: minden karakter ASCII kódjából kivonunk 32-t (modulo 64, hogy figyelembe vegyük a súlyos ékezet használatát), hogy 6 bites értéket kapjunk, 4 db 6 bites csoportot összefűzünk, hogy 24 bitet kapjunk, majd 3 bájtot adunk ki.

A kódolási folyamatot ez a táblázat mutatja be, amely a fenti kódolás levezetését mutatja a "Cat" esetében.

Eredeti karakterek C a t Eredeti ASCII, decimális 67 97 116 ASCII, bináris 0 1 0 0 00 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0 Új decimális értékek 16 54 5 52 +32 48 86 37 84 uuenkódolt karakterek 0 V % T

uuencode tábla A következő táblázat a konverziós folyamat során kapott 6 bites mezők decimális értékének konverzióját, valamint a hozzájuk tartozó ASCII karakter kimeneti kódot és karaktert mutatja.

Vegye figyelembe, hogy egyes kódolók szóközt (32-es kód) produkálhatnak ékezetes ("`", 96-os kód) helyett, míg egyes dekóderek elutasíthatják a szóközt tartalmazó adatok dekódolását.

bits ASCIIcode ASCIIchar bits ASCIIcode ASCIIchar bits ASCIIcode ASCIIchar bits ASCIIcode ASCIIchar 00 96 ` 16 48 0 32 64 @ 48 80 P 01 33 ! 17 49 1 33 65 A 49 81 Q 02 34 " 18 50 2 34 66 B 50 82 R 03 35 # 19 51 3 35 67 C 51 83 S 04 36 $ 20 52 4 36 68 D 52 84 T 05 37 % 21 53 5 37 69 E 53 85 U 06 38 & 22 54 6 38 70 F 54 86 V 07 39 ' 23 55 7 39 71 G 55 87 W 08 40 ( 24 56 8 40 72 H 56 88 X 09 41 ) 25 57 9 41 73 I 57 89 Y 10 42 * 26 58 : 42 74 J 58 90 Z 11 43 + 27 59 ; 43 75 K 59 91 [ 12 44 , 28 60 < 44 76 L 60 92 \ 13 45 - 29 61 = 45 77 M 61 93 ] 14 46 . 30 62 > 46 78 N 62 94 ^ 15 47 / 31 63 ? 47 79 O 63 95 _

Példa A következő egysoros szövegfájl uuenkódolásának példája. Ebben a példában a %0D a kocsivissza karakter bájtábrázolása, a %0A pedig a soremelés karakter bájtábrázolása.

file

File Name = wikipedia-url.txt File Contents = http://www.wikipedia.org%0D%0A

uuencoding

begin 644 wikipedia-url.txt ::'1T<#HO+W=W=RYW:6MI<&5D:6$N;W)G#0H` ` end

Forkok (fájl, erőforrás) A Unix hagyományosan egyetlen elágazással tárolja a fájladatokat. Egyes fájlrendszerek azonban több, egyetlen fájlhoz kapcsolódó elágazást is támogatnak. Például a klasszikus Mac OS Hierarchical File System (HFS) egy adatelágazást és egy erőforráselágazást támogatott. A Mac OS HFS+ több elágazást támogat, akárcsak a Microsoft Windows NTFS alternatív adatfolyamai. A legtöbb uukódoló eszköz csak az elsődleges adatelágazásból származó adatokat kezeli, ami információvesztéshez vezethet kódolás/dekódolás során (például a Windows NTFS fájlmegjegyzései egy másik elágazásban tárolódnak). Néhány eszköz (mint például a klasszikus Mac OS alkalmazás, az UUTool) úgy oldotta meg a problémát, hogy a különböző elágazásokat egy fájlba fűzte össze, és fájlnév szerint különböztette meg őket.

Kapcsolat az xxencode, Base64 és ASCII85 kódolásokkal

Korlátozott karaktertartománya ellenére az uuenkódolt adatok időnként megsérülhetnek bizonyos, nem ASCII karakterkészleteket, például az EBCDIC-t használó számítógépeken történő áthaladás során. A probléma megoldására tett egyik kísérlet az xxencode formátum volt, amely csak alfanumerikus karaktereket, valamint plusz és mínusz szimbólumokat használt. Manapság elterjedtebb a Base64 formátum, amely ugyanazon a csak alfanumerikus koncepción alapul, szemben az ASCII 32–95-tel. Mindhárom formátum 6 bitet (64 különböző karaktert) használ a bemeneti adatok ábrázolására.

A Base64 kódot az uuencode programmal is lehet generálni, és formátuma hasonló, kivéve a tényleges karakterfordítást:

A fejléc erre változik: begin-base64 <mode> <file> a vége ez lesz

és a köztes sorok a következőből kiválasztott karakterekkel vannak kódolva: ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789+/

Egy másik alternatíva az Ascii85, amely négy bináris karaktert kódol öt ASCII karakterként. Az ASCII85-öt PostScript és PDF formátumokban használják.

Hátrányok Az uuencoding 3 előre formázott bájtból 4-et csinál, és hozzáadja a kezdő/záró címkéket, a fájlnevet és az elválasztójeleket. Ez legalább 33%-kal több adatot termel a forrásfájlhoz képest, bár ezt legalább valamelyest kompenzálni lehet a fájl tömörítésével az uuencoding előtt.

Nyelvtámogatás Python A Python nyelv támogatja az uuenkódolást a "uu" kodekkel ellátott kodek modul használatával:

Python 2 esetén (elavult/megszűnt 2020. január 1-jétől): $ python -c 'print "Cat".encode("uu")' begin 666 <data> #0V%T

end

$

Python 3 esetén ahol a kodek modult importálni és közvetlenül használni kell: $ python3 -c "from codecs import encode;print(encode(b'Cat', 'uu'))" b'begin 666 <data>\n#0V%T\n \nend\n' $

Dekódoláshoz add át a teljes fájlt: $ python3 -c "from codecs import decode;print(decode(b'begin 666 <data>\n#0V%T\n \nend\n', 'uu'))" b'Cat'

Perl A Perl nyelv natívan támogatja az uuenkódolást a pack() és unpack() operátorok használatával, az "u" formátumú karakterlánccal: $ perl -e 'print pack("u","Cat")' #0V%T A base64 dekódolása az unpack paranccsal hasonlóképpen elvégezhető a karakterek lefordításával: $ perl -e 'print unpack("u","#0V%T")' Cat

Jól formázott uuenkódolt fájlok létrehozásához modulokat kell használni, vagy egy kicsit több kódot:

Encode (oneliner) $ perl -ple 'BEGIN{use File::Basename;$/=undef;$sn=basename($ARGV);} $_= "begin 600 $sn\n".(pack "u", $_)."`\nend" if $_' /some/file/to_encode.gz

PHP A PHP nyelv rendelkezik egy natív convert_uuencode() függvénnyel: $ php -r "echo convert_uuencode('Cat');" #0V%T ` A dekódolás a megfelelő convert_uudecode() függvénnyel történik: $ php -r "echo convert_uudecode('#0V%T');" Cat

Kapcsolódó szócikkek MIME Base64

Jegyzetek

Fordítás

További információk uuencode entry in POSIX.1-2008 GNU-sharutils – nyílt forráskódú shar/unshar/uuencode/uudecode segédprogramcsomag UUDeview – nyílt forráskódú program Base64, BinHex, uuencode, xxencode stb. kódolására/dekódolására Unix/Windows/DOS rendszerekhez StUU – nyílt forráskódú gyors UUDecoder Macintosh-ra, készítette: Stuart Cheshire nyílt forráskódú Java könyvtár uuenkódolt (e-mail) mellékletek dekódolásához AN11229 – NXP alkalmazási megjegyzés: UU kódolás UART ISP-hez

Kategória:Informatika Kategória:Számítógép-programozás Kategória:Unix-parancsok