بنكود
Bencode (تُنطق مثل بي-إنكود ) هي التشفير الذي يستخدمه نظام مشاركة الملفات من نظير إلى نظير BitTorrent لتخزين ونقل البيانات ذات البنية غير المنظمة. [ 1 ]
يدعم أربعة أنواع مختلفة من القيم:
- سلاسل البايت ،
- الأعداد الصحيحة ،
- القوائم (المصفوفات)، و
- القواميس (المصفوفات الترابطية) .
يُستخدم ترميز Ben بشكل شائع في ملفات التورنت ، ولذلك فهو جزء من مواصفات BitTorrent. هذه الملفات الوصفية هي ببساطة قواميس مُرمّزة باستخدام Ben.
يُعدّ ترميز Bencoding بسيطًا، ولأن الأرقام تُرمّز كنصٍّ بنظام العد العشري، فهو لا يتأثر بترتيب البايتات ، وهو أمرٌ بالغ الأهمية لتطبيقٍ متعدد المنصات مثل BitTorrent. كما أنه يتمتع بمرونةٍ كبيرة، طالما أن التطبيقات تتجاهل مفاتيح القاموس غير المتوقعة، بحيث يمكن إضافة مفاتيح جديدة دون التسبب في أي تعارضات.
خوارزمية التشفير
يستخدم Bencode أحرف ASCII كفواصل وأرقام لترميز هياكل البيانات بتنسيق بسيط ومضغوط.
- يتم ترميز الأعداد الصحيحة
i<base10 integer>eعلى النحو التالي : .- يتم ترميز العدد الصحيح بالأساس 10 وقد يكون سالبًا (يشار إليه بعلامة ناقص في البداية).
- لا يُسمح بالأصفار البادئة إلا إذا كان العدد الصحيح يساوي صفرًا.
- أمثلة:
- يتم ترميز الصفر على النحو التالي
i0e: . - يتم ترميز الرقم 42 على النحو التالي
i42e: - يتم ترميز العدد سالب اثنين وأربعين على النحو التالي:
i-42e.
- يتم ترميز الصفر على النحو التالي
- يتم ترميز سلاسل البايت
<length>:<contents>على النحو التالي :- الطول هو عدد البايتات في السلسلة، مشفرة بالأساس 10.
- يفصل الرمز النقطي (
:) بين الطول والمحتوى. - المحتويات هي العدد الدقيق للبايتات المحدد بالطول.
- المحتويات عبارة عن سلسلة من البايتات (وليست سلسلة نصية)
- أمثلة:
- يتم ترميز السلسلة الفارغة على النحو التالي:
0:. - يتم ترميز السلسلة "bencode" على النحو التالي
7:bencode:
- يتم ترميز السلسلة الفارغة على النحو التالي:
- يتم ترميز القوائم
l<elements>eعلى النحو التالي :- يبدأ بـ
lوينتهي بـe. - العناصر عبارة عن قيم مشفرة بصيغة Bencode يتم دمجها بدون فواصل.
- أمثلة:
- يتم ترميز القائمة الفارغة على النحو التالي:
le. - يتم ترميز قائمة تحتوي على السلسلة "bencode" والعدد الصحيح -20 على النحو التالي
l7:bencodei-20ee:
- يتم ترميز القائمة الفارغة على النحو التالي:
- يبدأ بـ
- يتم ترميز القواميس
d<pairs>eعلى النحو التالي :- يبدأ بـ
dوينتهي بـe. - يحتوي على أزواج مفتاح-قيمة.
- المفاتيح عبارة عن سلاسل بايت ويجب أن تظهر بالترتيب المعجمي.
- يتبع كل مفتاح قيمته مباشرة، والتي يمكن أن تكون أي نوع مشفر.
- أمثلة:
- يتم ترميز القاموس الفارغ على النحو التالي:
de. - يتم ترميز قاموس يحتوي على المفاتيح "wiki" → "bencode" و "meaning" → 42 على النحو التالي
d7:meaningi42e4:wiki7:bencodee:
- يتم ترميز القاموس الفارغ على النحو التالي:
- يبدأ بـ
لا توجد قيود على أنواع القيم المخزنة داخل القوائم والقواميس؛ فقد تحتوي على قوائم وقواميس أخرى، مما يسمح بهياكل بيانات معقدة بشكل تعسفي.
يُحدد Bencode أنواع سلاسل البايت فقط، وليس أي ترميز أحرف مُحدد لتخزين النصوص. وللتطبيقات اللاحقة ومواصفات تنسيق البيانات التي تستخدم Bencode حرية تحديد أي ترميز تُفضله لترميز النصوص إلى سلاسل بايت مُرمّزة باستخدام Bencode.
أنواع الأخطاء في Bencode
فيما يلي قائمة بالأخطاء المحتملة التي قد يحتوي عليها ملف bencode غير منسق بشكل صحيح:
- قيمة الجذر فارغة.
- جذر غير مفرد.
- تمت مصادفة نوع غير صالح (الحرف ليس 'i' أو 'l' أو 'd' أو '0'-'9').
- حرف الإنهاء 'e' مفقود لأنواع 'i' أو 'l' أو 'd'.
- أخطاء الأعداد الصحيحة:
- يحتوي على أحرف غير رقمية.
- يحتوي على صفر بادئ.
- يساوي الصفر السالب.
- أخطاء في سلسلة البايت:
- الطول السالب.
- الطول غير متبوع بعلامة ":".
- حدث خطأ غير متوقع في نهاية الملف قبل إكمال السلسلة.
- يتم تحديد الطول بوحدات نقاط الترميز (الأحرف) بدلاً من البايتات.
- أخطاء القاموس:
- المفتاح ليس سلسلة نصية.
- مفاتيح مكررة.
- المفاتيح غير مرتبة.
- تم فرز المفاتيح بشكل غير صحيح حسب نقطة الترميز في ترميز حرف معين، بدلاً من فرزها معجميًا حسب الترتيب.
- قيمة مفقودة لمفتاح.
سمات
Bencode هو نوع متخصص للغاية من الترميز الثنائي وله بعض الخصائص الفريدة:
- لكل قيمة (مركبة) ممكنة، يوجد ترميز واحد صالح فقط؛ أي أن هناك تقابلاً بين القيم وترميزاتها. وهذا يتيح للتطبيقات مقارنة القيم المُرمّزة بمقارنة أشكالها المُرمّزة، مما يُغني عن الحاجة إلى فك ترميز القيم.
- تؤدي تقنية Bencoding وظائف مشابهة للغات البيانات مثل JSON و YAML ، حيث تسمح بتخزين البيانات المعقدة ذات البنية غير المنظمة بطريقة مستقلة عن النظام الأساسي . وهذا يتيح تخزين البيانات المعقدة في الذاكرة بشكل خطي.
العيوب
لا يُعتبر تنسيق Bencode تنسيقًا قابلاً للقراءة البشرية . مع أنّه يُمكن فك تشفير مجموعات رموز BE يدويًا، إلا أن القيم المُشفّرة غالبًا ما تحتوي على بيانات ثنائية ، لذا فإنّ فك التشفير يدويًا قد يكون عرضةً للأخطاء. لا يُنصح بتحرير ملفات Bencode في مُحرّرات النصوص لأنّها تحتوي على بيانات ثنائية، لذا يجب استخدام مُحرّر سداسي عشري أو أداة مُخصّصة لتحرير Bencode.
لا يخزن Bencode أي بيانات وصفية حول حجم هياكل القوائم أو القواميس، مما يتطلب قراءة جميع العناصر السابقة بالتسلسل للوصول إلى حقل معين. ولذلك، قد لا يكون Bencode مناسبًا لهياكل البيانات الكبيرة التي تتطلب الوصول العشوائي إلى الحقول.
انظر أيضاً
مراجع
- ↑ مواصفات بروتوكول بت تورنت، مؤرشفة بتاريخ 26 يوليو 2019 في أرشيف الإنترنت (Wayback Machine ). BitTorrent.org. تم الاطلاع عليها بتاريخ 8 أكتوبر 2018.
روابط خارجية
- مواصفات Bencoding
- File_Bittorrent2 - تطبيق آخر لـ PHP Bencode/decode
- تطبيق BitTorrent الأصلي بلغة Python كحزمة مستقلة
- محرر ملفات التورنت: محرر بواجهة رسومية متعدد المنصات لملفات BEncode
- bencode-tools - مكتبة C لمعالجة البيانات المشفرة بنظام Bencode، ومدقق يشبه مخطط XML لرسائل Bencode في بايثون
- Bento - مكتبة Bencode في Elixir.
- Beecoder - محلل تدفق الملفات الذي يقوم بفك/ترميز تنسيق بيانات "B-encode" على Java باستخدام واجهة برمجة تطبيقات تدفق java.io.*.
- تحليل Bencode في Java
- مكتبة Bencode في لغة Scala
- تحليل Bencode في لغة C
- توجد العديد من تطبيقات لغة بيرل على شبكة CPAN
- بت تورنت
- تنسيقات تسلسل البيانات
