ترميز uuencoding
uuencoding هو شكل من أشكال التشفير الثنائي إلى النص الذي نشأ في برامج Unix uuencode و uudecode التي كتبتها ماري آن هورتون في جامعة كاليفورنيا، بيركلي في عام 1980، [ 1 ] لتشفير البيانات الثنائية للإرسال في أنظمة البريد الإلكتروني .
اسم "uuencoding" مشتق من "Unix-to-Unix Copy" ، أي أن "Unix-to-Unix encoding" هو ترميز آمن لنقل الملفات من نظام يونكس إلى آخر، ولكن دون ضمان أن تكون جميع الأنظمة الوسيطة أنظمة يونكس. ونظرًا لاحتمالية إعادة توجيه رسالة بريد إلكتروني عبر أو إلى أجهزة كمبيوتر ذات مجموعات أحرف مختلفة ، أو عبر وسائل نقل غير متوافقة مع معيار 8 بت ، أو معالجتها بواسطة برامج غير متوافقة مع هذا المعيار، فإن إعادة توجيه ملف ثنائي عبر البريد الإلكتروني قد يؤدي إلى تلفه. من خلال ترميز هذه البيانات إلى مجموعة فرعية من الأحرف مشتركة بين معظم مجموعات الأحرف، يصبح من غير المرجح أن يتم "ترجمة" أو تلف الشكل المرمز لهذه الملفات، وبالتالي يصل سليمًا دون تغيير إلى الوجهة. يقوم برنامج uudecode بعكس تأثير uuencode ، حيث يعيد إنشاء الملف الثنائي الأصلي بدقة. وقد شاع استخدام uuencode/decode لإرسال الملفات الثنائية (وخاصة المضغوطة) عبر البريد الإلكتروني ونشرها في مجموعات أخبار يوزنت ، وما إلى ذلك.
لقد تم استبدالها الآن إلى حد كبير بـ MIME و yEnc . مع MIME، يتم نقل الملفات التي كان من الممكن ترميزها بـ uuencode باستخدام ترميز Base64 بدلاً من ذلك .
تنسيق مشفر
يبدأ الملف المشفر بـ uuencoded بسطر رأس على النحو التالي:
ابدأ <الوضع> <ملف><سطر جديد>
<mode>تُعرَض أذونات الملف في نظام يونكس على شكل ثلاثة أرقام ثمانية (مثل 644، 744). وهذا الأمر عادةً ما يكون ذا أهمية لأنظمة التشغيل الشبيهة بنظام يونكس فقط.
<file>هذا هو اسم الملف الذي سيتم استخدامه عند إعادة إنشاء البيانات الثنائية.
<newline>يشير إلى حرف سطر جديد ، ويستخدم لإنهاء كل سطر.
يستخدم كل سطر من البيانات التنسيق التالي:
<طول الحرف><أحرف منسقة><سطر جديد>
<length character>يمثل هذا الحرف عدد بايتات البيانات المشفرة في ذلك السطر. وهو حرف ASCII يُحدد بإضافة 32 إلى عدد البايتات الفعلي، باستثناء علامة النبرة الحادة "`" (رمز ASCII 96) التي تدل على صفر بايت. تحتوي جميع أسطر البيانات، باستثناء السطر الأخير (إذا لم يكن طول البيانات قابلاً للقسمة على 45)، على 45 بايت من البيانات المشفرة (60 حرفًا بعد التشفير). لذلك، فإن الغالبية العظمى من قيم الطول هي 'M' (32 + 45 = رمز ASCII 77 أو "M").
<formatted characters>هي أحرف مشفرة. انظر قسم آلية التنسيق لمزيد من التفاصيل حول التنفيذ الفعلي.
ينتهي الملف بسطرين:
`<سطر جديد> نهاية السطر الجديد
السطر قبل الأخير هو أيضًا حرف يشير إلى طول السطر، حيث تشير علامة النبرة الحادة إلى صفر بايت.
كملف كامل، سيكون الناتج المشفر باستخدام uuencode لملف نصي عادي باسم cat.txt يحتوي فقط على الأحرف Cat هو
بداية 644 cat.txt #0V%T ` نهاية
السطر الأول هو رأس uuencode قياسي؛ يشير الرمز '#' إلى أن هذا السطر يقوم بتشفير ثلاثة أحرف؛ يظهر السطران الأخيران في نهاية جميع الملفات المشفرة بواسطة uuencode.
آلية التنسيق
تقوم آلية uuencodingالتكرار بما يلي لكل 3 بايتات، مع ترميزها إلى 4 أحرف قابلة للطباعة، يمثل كل حرف رقمًا عدديًا من الأساس 64 :
- ابدأ بـ 3 بايتات من المصدر، أي 24 بت إجمالاً.
- يتم تقسيمها إلى 4 مجموعات من 6 بت، كل منها يمثل قيمة في النطاق من 0 إلى 63: البتات (00-05)، (06-11)، (12-17) و(18-23).
- أضف 32 إلى كل قيمة. بإضافة 32، يصبح نطاق النتائج الممكنة بين 32 (مسافة) و95 ( تسطير ). 96 ( علامة النبرة ) كحرف خاص هو امتداد منطقي لهذا النطاق. على الرغم من توثيق المسافة كترميز للقيمة 0، إلا أن بعض التطبيقات، مثل GNU sharutils [ 2 ] ، تستخدم علامة النبرة لترميز الأصفار في متن الملف أيضًا، دون استخدام المسافة.
- قم بإخراج ما يعادل هذه الأرقام بصيغة ASCII.
إذا لم يكن طول المصدر قابلاً للقسمة على 3، فسيحتوي القسم الأخير المكون من 4 بايتات على بايتات حشو لجعله قابلاً للقسمة بشكل صحيح. تُطرح هذه البايتات من طول السطر <length character>حتى لا يُضيف المُفكِّك أحرفًا غير مرغوب فيها إلى الملف.
uudecodingهو عكس ما سبق، اطرح 32 من رمز ASCII لكل حرف ( باقي القسمة على 64 لمراعاة استخدام علامة التشكيل) للحصول على قيمة 6 بت، ثم قم بدمج 4 مجموعات من 6 بت للحصول على 24 بت، ثم قم بإخراج 3 بايت.
يوضح هذا الجدول عملية التشفير، حيث يُظهر اشتقاق التشفير المذكور أعلاه لكلمة "قطة".
| شخصيات أصلية | C | a | t | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | ||||||||||||||||||||
| الأحرف المشفرة بـ uuencoded | 0 | V | % | T | ||||||||||||||||||||
جدول ترميز uuencode
يوضح الجدول التالي تحويل القيمة العشرية للحقول ذات 6 بت التي تم الحصول عليها أثناء عملية التحويل ورمز إخراج الأحرف ASCII المقابل لها والحرف.
لاحظ أن بعض أجهزة التشفير قد تنتج مسافة (الرمز 32) بدلاً من علامة النبرة الحادة ("`", الرمز 96)، في حين أن بعض أجهزة فك التشفير قد ترفض فك تشفير البيانات التي تحتوي على مسافة.
| أجزاء | رمز ASCII | حرف ASCII | أجزاء | رمز ASCII | حرف ASCII | أجزاء | رمز ASCII | حرف ASCII | أجزاء | رمز ASCII | حرف ASCII | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ٠٠ | 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 | _ |
مثال
فيما يلي مثال على ترميز ملف نصي من سطر واحد باستخدام خوارزمية uuencoding. في هذا المثال، يمثل %0D تمثيل البايت لحرف الإرجاع ، ويمثل %0A تمثيل البايت لحرف السطر الجديد .
- ملف
اسم الملف = wikipedia-url.txt محتويات الملف = http://www.wikipedia.org%0D%0A- ترميز uuencoding
ابدأ 644 wikipedia-url.txt ::'1T<#HO+W=W=RYW:6MI<&5D:6$N;W)G#0H` ` نهاية
التفرعات (ملف، مورد)
تقليديًا، يحتوي نظام يونكس على فرع واحد لتخزين بيانات الملفات. مع ذلك، تدعم بعض أنظمة الملفات فروعًا متعددة مرتبطة بملف واحد. على سبيل المثال، كان نظام الملفات الهرمي (HFS) في نظام ماك أو إس يدعم فرعًا للبيانات وفرعًا للموارد . يدعم نظام ماك أو إس HFS+ فروعًا متعددة، وكذلك نظام مايكروسوفت ويندوز NTFS الذي يوفر تدفقات بيانات بديلة . تتعامل معظم أدوات uucoding مع البيانات من فرع البيانات الرئيسي فقط، مما قد يؤدي إلى فقدان بعض المعلومات أثناء التشفير/فك التشفير (على سبيل المثال، تُحفظ تعليقات ملفات ويندوز NTFS في فرع مختلف). حلت بعض الأدوات (مثل تطبيق UUTool الكلاسيكي في نظام ماك أو إس ) هذه المشكلة عن طريق دمج الفروع المختلفة في ملف واحد وتمييزها حسب اسم الملف.
العلاقة بـ xxencode و Base64 و Ascii85
على الرغم من محدودية نطاق الأحرف التي يدعمها ترميز uuencode، إلا أن البيانات قد تتعرض للتلف أحيانًا عند مرورها عبر بعض الحواسيب التي تستخدم مجموعات أحرف غير ASCII، مثل EBCDIC . وقد تمثلت إحدى محاولات حل هذه المشكلة في استخدام تنسيق xxencode، الذي يقتصر على الأحرف الأبجدية الرقمية ورمزي الجمع والطرح. أما تنسيق Base64 فهو الأكثر شيوعًا اليوم، ويعتمد على نفس المبدأ - استخدام الأحرف الأبجدية الرقمية فقط بدلاً من ASCII 32-95. تستخدم التنسيقات الثلاثة جميعها 6 بتات (64 حرفًا مختلفًا) لتمثيل بيانات الإدخال.
يمكن أيضًا إنشاء Base64 بواسطة برنامج uuencode وهو مشابه في التنسيق، باستثناء ترجمة الأحرف الفعلية:
تم تغيير العنوان إلى
بدء ترميز Base64 < الوضع> < الملف>
يصبح المقطع الدعائي
= = = =
ويتم ترميز الأسطر بينها بأحرف مختارة من
ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789+/
يُعدّ Ascii85 بديلاً آخر ، حيث يقوم بترميز أربعة أحرف ثنائية بخمسة أحرف ASCII. ويُستخدم Ascii85 في تنسيقات PostScript و PDF .
العيوب
تأخذ دالة uuencoding ثلاثة بايتات مُهيأة مسبقًا وتحولها إلى أربعة، كما تضيف وسوم البداية والنهاية، واسم الملف، والفواصل . هذا يزيد من حجم البيانات بنسبة 33% على الأقل مقارنةً بالمصدر وحده، مع إمكانية تعويض ذلك جزئيًا على الأقل بضغط الملف قبل ترميزه باستخدام uuencoding.
الدعم باللغات
بايثون
تدعم لغة بايثون ترميز 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'بيرل
تدعم لغة بيرل ترميز uuencoding بشكل أصلي باستخدام عاملي التشغيل 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
تحتوي لغة PHP على دالة أصلية باسم convert_uuencode():
$ php -r "echo convert_uuencode('Cat');" # 0V%T `يتم فك التشفير باستخدام الدالة المقابلة convert_uudecode():
$ php -r "echo convert_uudecode('#0V%T');" Catانظر أيضاً
- ترميز ثنائي إلى نصي لمقارنة خوارزميات الترميز المختلفة
مراجع
- ↑ هورتون، مارك. "دليل مبرمج يونكس UUENCODE(1C)" . جمعية تراث يونكس . تم الاسترجاع في 10 نوفمبر 2020 .
- ↑ "مصدر uuencode.c" . fossies.org . مؤرشف من الأصل بتاريخ 2021-06-05 . تم الاطلاع عليه بتاريخ 2021-06-05 .
- ↑ "مصدر PerlPowerTools" . metacpan.org . تم الاطلاع عليه بتاريخ 12-02-2024 .
- ↑ "مصدر uuencode.pl" . main.linuxfocus.org . تم الاطلاع عليه بتاريخ 12 فبراير 2024 .
روابط خارجية
- إدخال uuencode في POSIX.1-2008
- GNU-sharutils – مجموعة أدوات مفتوحة المصدر لفك تشفير/فك تشفير/ترميز/فك ترميز uu
- UUDeview – برنامج مفتوح المصدر لترميز/فك ترميز Base64 وBinHex وuuencode وxxencode وغيرها لأنظمة Unix/Windows/DOS
- UUENCODE-UUDECODE – برنامج مفتوح المصدر للترميز/فك الترميز، من ابتكار كليم "الجد" داي
- StUU – برنامج فك ترميز UUD سريع مفتوح المصدر لنظام ماكنتوش من تطوير ستيوارت تشيشاير
- UUENCODE-UUDECODE – برنامج ترميز UUEncoder و UUDecoder مجاني عبر الإنترنت
- Java UUDecoder – مكتبة جافا مفتوحة المصدر لفك تشفير مرفقات البريد الإلكتروني المشفرة بـ uuencoded
- AN11229 – مذكرة تطبيقية من NXP: ترميز UU لـ UART ISP
- بريد إلكتروني
- يوزنت
- تنسيقات ترميز النص الثنائي
- أدوات يونكس SUS2008
