กลับไปหน้าบทความ

อ่าน 4 นาที

uuencoding

uuencoding เป็นรูปแบบหนึ่งของ การเข้ารหัสไบนารีเป็นข้อความ ซึ่งมีต้นกำเนิดมาจากโปรแกรม Unix uuencode และ uudecode ที่เขียนโดย Mary Ann Horton ที่ มหาวิทยาลัยแคลิฟอร์เนีย...

uuencoding

uuencodingเป็นรูปแบบหนึ่งของการเข้ารหัสไบนารีเป็นข้อความซึ่งมีต้นกำเนิดมาจากโปรแกรมUnix uuencodeและuudecodeที่เขียนโดยMary Ann Hortonที่มหาวิทยาลัยแคลิฟอร์เนีย เบิร์กลีย์ในปี 1980 [ 1 ]สำหรับการเข้ารหัส ข้อมูล ไบนารีเพื่อส่งในระบบ อีเมล

ชื่อ "uuencoding" มาจากUnix-to-Unix Copyซึ่งก็คือ "การเข้ารหัสแบบ Unix-to-Unix" เป็นวิธีการเข้ารหัสที่ปลอดภัยสำหรับการถ่ายโอนไฟล์ใดๆ จากระบบ Unix หนึ่งไปยังอีกระบบ Unix หนึ่ง แต่ไม่มีการรับประกันว่าระบบที่เชื่อมต่อระหว่างกันจะเป็นระบบ Unix ทั้งหมด เนื่องจากข้อความอีเมลอาจถูกส่งต่อไปยังคอมพิวเตอร์ที่มีชุดอักขระ ต่างกัน หรือผ่านการขนส่งที่ไม่รองรับ 8 บิตหรือถูกจัดการโดยโปรแกรมที่ไม่รองรับ 8 บิต การส่งต่อไฟล์ไบนารีผ่านอีเมลอาจทำให้ไฟล์เสียหายได้ โดยการเข้ารหัสข้อมูลดังกล่าวลงในชุดอักขระย่อยที่ใช้ร่วมกันได้ในชุดอักขระส่วนใหญ่ รูปแบบที่เข้ารหัสของไฟล์ข้อมูลดังกล่าวจึงไม่น่าจะถูก "แปล" หรือเสียหาย และจะมาถึงปลายทางอย่างสมบูรณ์และไม่เปลี่ยนแปลง โปรแกรมuudecodeจะกลับผลของuuencodeโดยสร้างไฟล์ไบนารีต้นฉบับขึ้นมาใหม่ให้เหมือนเดิมทุกประการ uuencode/decode ได้รับความนิยมในการส่งไฟล์ไบนารี (โดยเฉพาะไฟล์ที่ถูกบีบอัด) ทางอีเมล และการโพสต์ไปยัง กลุ่มข่าว Usenetเป็นต้น

ปัจจุบัน MIMEและyEncได้เข้ามาแทนที่แล้วเป็นส่วนใหญ่ด้วย MIME ไฟล์ที่อาจเคยถูกเข้ารหัสแบบ uuencoded จะถูกส่งผ่านด้วยการเข้ารหัส Base64 แทน

รูปแบบการเข้ารหัส

ไฟล์ที่เข้ารหัสแบบ uuencoded จะเริ่มต้นด้วยบรรทัดส่วนหัวในรูปแบบ:

เริ่มต้น <โหมด> <ไฟล์><ขึ้นบรรทัดใหม่> 

<mode>คือสิทธิ์การเข้าถึงไฟล์ในระบบ Unixซึ่งแสดงเป็นตัวเลขฐานแปดสามหลัก (เช่น 644, 744) โดยทั่วไปแล้ว ข้อมูลนี้จะมีความสำคัญเฉพาะกับระบบปฏิบัติการ ที่คล้าย Unix เท่านั้น

<file>คือชื่อไฟล์ที่จะใช้เมื่อสร้างข้อมูลไบนารีขึ้นใหม่

<newline>แสดงถึง อักขระ ขึ้นบรรทัดใหม่ซึ่งใช้เพื่อจบแต่ละบรรทัด

แต่ละบรรทัดข้อมูลใช้รูปแบบดังนี้:

<ความยาวอักขระ><อักขระที่จัดรูปแบบแล้ว><ขึ้นบรรทัดใหม่> 

<length character>เป็นอักขระที่ระบุจำนวนไบต์ข้อมูลที่ถูกเข้ารหัสในบรรทัดนั้น นี่คือ อักขระ ASCIIที่กำหนดโดยการบวก 32 เข้ากับจำนวนไบต์จริง ยกเว้นเครื่องหมายเน้นเสียง "`" (รหัส ASCII 96) ซึ่งหมายถึงศูนย์ไบต์ บรรทัดข้อมูลทั้งหมด ยกเว้นบรรทัดสุดท้าย (หากความยาวข้อมูลไม่หารด้วย 45 ลงตัว) จะมีข้อมูลที่เข้ารหัส 45 ไบต์ (60 อักขระหลังจากการเข้ารหัส) ดังนั้น ค่าความยาวส่วนใหญ่จึงเป็น 'M' (32 + 45 = รหัส ASCII 77 หรือ "M")

<formatted characters>เป็นอักขระที่เข้ารหัสแล้ว ดูหัวข้อ§ กลไกการจัดรูปแบบสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งานจริง

ไฟล์นี้ลงท้ายด้วยสองบรรทัด:

`<ขึ้นบรรทัดใหม่> จบ<ขึ้นบรรทัดใหม่> 

บรรทัดรองสุดท้ายเป็นอักขระที่ระบุความยาวของบรรทัด โดยเครื่องหมายเน้นเสียง (grave accent) หมายถึงศูนย์ไบต์

ไฟล์ข้อความธรรมดาชื่อ cat.txt ที่มีเฉพาะตัวอักษรCatจะถูกแปลง เป็นไฟล์ uuencoded ในรูปแบบสมบูรณ์ดังนี้

begin 644 cat.txt #0V%T ` จบ 

บรรทัดเริ่มต้นเป็นส่วนหัวมาตรฐานของ uuencode โดยเครื่องหมาย '#' แสดงว่าบรรทัดนั้นเข้ารหัสอักขระสามตัว และสองบรรทัดสุดท้ายจะปรากฏที่ส่วนท้ายของไฟล์ที่เข้ารหัสด้วย uuencode ทั้งหมด

กลไกการจัดรูปแบบ

กลไกนี้จะuuencodingทำซ้ำขั้นตอนต่อไปนี้ทุกๆ 3 ไบต์ โดยเข้ารหัสเป็นอักขระที่พิมพ์ได้ 4 ตัว ซึ่งแต่ละอักขระแทนตัวเลขฐาน64 :

  1. เริ่มต้นด้วยข้อมูล 3 ไบต์จากแหล่งข้อมูลรวมทั้งหมด 24 บิต
  2. แบ่งออกเป็น 4 กลุ่ม กลุ่มละ 6 บิต โดยแต่ละกลุ่มแทนค่าในช่วง 0 ถึง 63 ได้แก่ บิต (00-05), (06-11), (12-17) และ (18-23)
  3. เพิ่ม 32 ให้กับแต่ละค่า การเพิ่ม 32 นี้หมายความว่าผลลัพธ์ที่เป็นไปได้จะอยู่ระหว่าง 32 (" " ช่องว่าง) และ 95 ("_" ขีดเส้นใต้ ) 96 ("`" เครื่องหมายเน้นเสียง ) เป็น "อักขระพิเศษ" ซึ่งเป็นการขยายเชิงตรรกะของช่วงนี้ แม้ว่าอักขระช่องว่างจะถูกบันทึกไว้ว่าเป็นการเข้ารหัสสำหรับค่า 0 แต่การใช้งาน เช่น GNU sharutils [ 2 ]จริงๆ แล้วใช้อักขระเน้นเสียงเพื่อเข้ารหัสศูนย์ในเนื้อหาของไฟล์เช่นกัน โดยไม่ใช้ช่องว่างเลย
  4. แสดงผลลัพธ์เป็นค่า ASCII ที่เทียบเท่ากับตัวเลขเหล่านี้

หากความยาวของข้อมูลต้นฉบับหารด้วย 3 ไม่ลงตัว ส่วน 4 ไบต์สุดท้ายจะประกอบด้วยไบต์เสริมเพื่อให้หารลงตัว ไบต์เหล่านี้จะถูกหักออกจากความยาวของบรรทัด<length character>เพื่อป้องกันไม่ให้ตัวถอดรหัสเพิ่มอักขระที่ไม่ต้องการลงในไฟล์

uudecodingเป็นกระบวนการย้อนกลับจากข้างต้น โดยลบ 32 ออกจากรหัส ASCII ของแต่ละตัวอักษร ( โมดูลัส 64 เพื่อคำนึงถึงการใช้เครื่องหมายเน้นเสียง) เพื่อให้ได้ค่า 6 บิต จากนั้นรวมกลุ่ม 6 บิต 4 กลุ่มเข้าด้วยกันเพื่อให้ได้ 24 บิต แล้วจึงส่งออกเป็น 3 ไบต์

ตารางนี้แสดงให้เห็นถึงกระบวนการเข้ารหัส โดยแสดงที่มาของการเข้ารหัสข้างต้นสำหรับคำว่า "Cat"

ตัวละครดั้งเดิม Cat
ต้นฉบับ ASCII, ทศนิยม 67 97 116
ASCII, ไบนารี 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0
ค่าทศนิยมใหม่ 16 54 5 52
+32 48 86 37 84
อักขระที่เข้ารหัสแบบ uu 0V%T

ตาราง uuencode

ตารางต่อไปนี้แสดงการแปลงค่าทศนิยมของฟิลด์ 6 บิตที่ได้ระหว่างกระบวนการแปลง และรหัสอักขระ ASCII และอักขระที่สอดคล้องกัน

โปรดทราบว่า ตัวเข้ารหัสบางตัวอาจสร้างช่องว่าง (รหัส 32) แทนเครื่องหมายเน้นเสียง ("`", รหัส 96) ในขณะที่ตัวถอดรหัสบางตัวอาจปฏิเสธการถอดรหัสข้อมูลที่มีช่องว่าง

บิตรหัสASCIIอักขระ ASCIIบิตรหัสASCIIอักขระ ASCIIบิตรหัสASCIIอักขระ ASCIIบิตรหัสASCIIอักขระ ASCII
0096`164803264@4880P
0133!174913365A4981Q
0234"185023466B5082R
0335#195133567C5183S
0436$205243668D5284T
0537%215353769E5385U
0638&225463870F5486V
0739'235573971G5587W
0840(245684072H5688X
0941)255794173I5789Y
1042*2658:4274J5890Z
1143+2759;4375K5991[
1244,2860<4476L6092\
1345-2961=4577M6193]
1446.3062>4678N6294^
1547/3163?4779O6395_

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างการเข้ารหัส uu สำหรับไฟล์ข้อความบรรทัดเดียว ในตัวอย่างนี้%0Dคือไบต์แทนการขึ้นบรรทัดใหม่ (carriage return ) และ%0Aคือไบต์แทนการป้อนบรรทัดใหม่ (line feed )

ไฟล์
ชื่อไฟล์ = wikipedia-url.txt เนื้อหาไฟล์ = http://www.wikipedia.org%0D%0A 
uuencoding
begin 644 wikipedia-url.txt ::'1T<#HO+W=W=RYW:6MI<&5D:6$N;W)G#0H` ` จบ 

Forks (ไฟล์, ทรัพยากร)

โดยทั่วไปแล้ว Unix จะมี ฟอร์กเดียวที่ใช้เก็บข้อมูลไฟล์ อย่างไรก็ตาม ระบบไฟล์บางระบบรองรับฟอร์กหลายอันที่เชื่อมโยงกับไฟล์เดียว ตัวอย่างเช่นระบบไฟล์แบบลำดับชั้น (HFS) ของ Mac OS รุ่นคลาสสิก รองรับฟอร์กข้อมูลและฟอร์กทรัพยากร Mac OS HFS+รองรับฟอร์กหลายอัน เช่นเดียวกับสตรีมข้อมูลทางเลือก ของ Microsoft Windows NTFS เครื่องมือเข้ารหัส uucoding ส่วนใหญ่จะจัดการเฉพาะข้อมูลจากฟอร์กข้อมูลหลักเท่านั้น ซึ่งอาจส่งผลให้ข้อมูลสูญหายระหว่างการเข้ารหัส/ถอดรหัส (ตัวอย่างเช่น ความคิดเห็นในไฟล์ Windows NTFS จะถูกเก็บไว้ในฟอร์กอื่น) เครื่องมือบางอย่าง (เช่น แอปพลิเคชันUUTool ของ Mac OS รุ่นคลาสสิก ) แก้ปัญหานี้โดยการรวมฟอร์กต่างๆ เข้าด้วยกันเป็นไฟล์เดียวและแยกแยะความแตกต่างด้วยชื่อไฟล์

ความสัมพันธ์กับ xxencode, Base64 และ Ascii85

แม้ว่าข้อมูลที่เข้ารหัสแบบ uuencoded จะมีช่วงอักขระที่จำกัด แต่บางครั้งข้อมูลก็อาจเสียหายระหว่างการส่งผ่านคอมพิวเตอร์บางเครื่องที่ใช้ชุดอักขระที่ไม่ใช่ ASCII เช่นEBCDICความพยายามหนึ่งในการแก้ปัญหานี้คือรูปแบบ xxencode ซึ่งใช้เฉพาะตัวอักษรและตัวเลข รวมถึงสัญลักษณ์บวกและลบเท่านั้น ปัจจุบันรูปแบบที่นิยมใช้มากกว่าคือ Base64 ซึ่งมีพื้นฐานมาจากแนวคิดเดียวกันคือใช้ เฉพาะตัว อักษรและตัวเลขเท่านั้น ต่างจาก ASCII 32–95 ทั้งสามรูปแบบใช้ 6 บิต (64 ตัวอักษรที่แตกต่างกัน) ในการแสดงข้อมูลอินพุต

โปรแกรม uuencode สามารถสร้าง Base64 ได้เช่นกัน และมีรูปแบบคล้ายกัน ยกเว้นการแปลงตัวอักษรจริง:

ส่วนหัวถูกเปลี่ยนเป็น

begin-base64 <mode> <file> 

ตัวอย่างกลายเป็น

==== 

และเส้นคั่นระหว่างเส้นจะถูกเข้ารหัสด้วยอักขระที่เลือกจาก

ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789+/ 

อีกทางเลือกหนึ่งคือAscii85ซึ่งเข้ารหัสอักขระไบนารีสี่ตัวเป็นอักขระ ASCII ห้าตัว Ascii85 ใช้ในรูปแบบ PostScriptและPDF

ข้อเสีย

uuencoding จะแปลงข้อมูล 3 ไบต์ที่จัดรูปแบบไว้แล้วให้เป็น 4 ไบต์ และยังเพิ่มแท็กเริ่มต้น/สิ้นสุด ชื่อไฟล์ และตัวคั่นเข้าไปด้วย ซึ่งทำให้ปริมาณข้อมูลเพิ่มขึ้นอย่างน้อย 33% เมื่อเทียบกับไฟล์ต้นฉบับเพียงอย่างเดียว แต่สามารถชดเชยได้บ้างโดยการบีบอัดไฟล์ก่อนที่จะทำการเข้ารหัสด้วย uuencoding

การสนับสนุนในหลายภาษา

ไพธอน

ภาษาPythonรองรับการเข้ารหัสแบบ uu โดยใช้โมดูล codecs ร่วมกับโคเด็ก "uu":

สำหรับ Python 2 (เลิกใช้งาน/ยุติการสนับสนุนตั้งแต่วันที่ 1 มกราคม 2020) :

$ python -c 'print "Cat".encode("uu")' begin 666 <data> # 0V%T end$

สำหรับ Python 3 ที่ต้องนำเข้าและใช้งานโมดูล codecs โดยตรง :

$ python3 -c "from codecs import encode;print(encode(b'Cat', 'uu'))" b'begin 666 <data>\n#0V%T\n \nend\n' $

ในการถอดรหัส ให้ส่งไฟล์ทั้งหมด:

$ python3 -c "from codecs import decode;print(decode(b'begin 666 <data>\n#0V%T\n \nend\n', 'uu'))" b'Cat'

เพิร์ล

ภาษาPerlรองรับการเข้ารหัสแบบ uu โดยตรงโดยใช้ตัวดำเนินการ pack() และ unpack() ร่วมกับสตริงรูปแบบ "u":

$ perl -e 'print pack("u","Cat")' # 0V%T 

การถอดรหัส base64 ด้วย unpack สามารถทำได้โดยการแปลงอักขระเช่นกัน:

$ perl -e 'print unpack("u","#0V%T")' Cat

ในการสร้างไฟล์ uuencoded ที่มีรูปแบบถูกต้อง คุณต้องใช้โมดูล[ 3 ]หรือโค้ดเพิ่มเติมอีกเล็กน้อย: [ 4 ]

เข้ารหัส (บรรทัดเดียว)

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

พีพี

ภาษาPHPมีฟังก์ชัน convert_uuencode() ในตัว:

$ php -r "echo convert_uuencode('Cat');" # 0V%T `

การถอดรหัสทำได้โดยใช้ฟังก์ชัน convert_uudecode() ที่เกี่ยวข้อง:

$ php -r "echo convert_uudecode('#0V%T');" Cat

ดูเพิ่มเติม

  • รายการuuencodeใน POSIX.1-2008
  • GNU-sharutils – ชุดยูทิลิตี้โอเพนซอร์สสำหรับ shar/unshar/uuencode/uudecode
  • UUDeview – โปรแกรมโอเพนซอร์สสำหรับเข้ารหัส/ถอดรหัส Base64, BinHex, uuencode, xxencode และอื่นๆ สำหรับ Unix/Windows/DOS
  • UUENCODE-UUDECODE – โปรแกรมโอเพนซอร์สสำหรับเข้ารหัส/ถอดรหัส สร้างโดย Clem "Grandad" Dye
  • StUU – โปรแกรมถอดรหัส UUD ความเร็วสูงแบบโอเพนซอร์สสำหรับ Macintosh โดยStuart Cheshire
  • UUENCODE-UUDECODE – เครื่องมือเข้ารหัส UUE และ UUDecoder ออนไลน์ฟรี
  • Java UUDecoder – ไลบรารี Java โอเพนซอร์สสำหรับถอดรหัสไฟล์แนบที่เข้ารหัสแบบ uuencoded (อีเมล)
  • AN11229 – เอกสารแนะนำการใช้งานของ NXP: การเข้ารหัส UU สำหรับ UART ISP

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Uuencoding&oldid=1334565912 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ uuencoding

uuencoding เป็นรูปแบบหนึ่งของ การเข้ารหัสไบนารีเป็นข้อความ ซึ่งมีต้นกำเนิดมาจากโปรแกรม Unix uuencode และ uudecode ที่เขียนโดย Mary Ann Horton ที่ มหาวิทยาลัยแคลิฟอร์เนีย...

รูปแบบการเข้ารหัส

ไฟล์ที่เข้ารหัสแบบ uuencoded จะเริ่มต้นด้วยบรรทัดส่วนหัวในรูปแบบ:

กลไกการจัดรูปแบบ

กลไกนี้จะ uuencoding ทำซ้ำขั้นตอนต่อไปนี้ทุกๆ 3 ไบต์ โดยเข้ารหัสเป็นอักขระที่พิมพ์ได้ 4 ตัว ซึ่งแต่ละอักขระแทน ตัวเลขฐาน 64 :

ตาราง uuencode

ตารางต่อไปนี้แสดงการแปลงค่าทศนิยมของฟิลด์ 6 บิตที่ได้ระหว่างกระบวนการแปลง และรหัสอักขระ ASCII และอักขระที่สอดคล้องกัน