متوفر أيضًا بلغات أخرى: English · Español · Português · Français
ترميز base58 وفكّه
رمِّز base58 وفُكَّه بأيٍّ من الأبجديتين، وانظر ما يحدث حين يُخلَط بينهما.
ما base58؟
base58 طريقة لكتابة البيانات الثنائية نصًّا، مثل base64، لكنها مصمَّمة لتصمد أمام قراءة إنسان لها. تستعمل ثمانية وخمسين محرفًا بدل أربعة وستين، والمحارف التي تُسقطها هي سبب وجودها: الصفر، وحرف O الكبير، وحرف I الكبير، وحرف l الصغير — وهما الزوجان اللذان لا يكاد أحد يميّزهما في خطٍّ اعتيادي — مع علامتَي الزائد والشرطة المائلة اللتين يستعملهما base64 وتنكسران عند النقر المزدوج أو عند وضع النص في رابط.
والناتج بلا حشو ولا ترقيم ولا فواصل أسطر. إنه سلسلة متّصلة من الحروف والأرقام تحدّدها بنقرة مزدوجة، وتقرؤها في الهاتف، وتنسخها عن شاشة دون أن تتساءل أكان ذاك حرف I أم l. ولهذا تستعمله عناوين البيتكوين، وبصمات IPFS، ومعرّفات الحسابات في XRP Ledger جميعًا.
وهو كذلك — وهذا ما لا تكاد أداةٌ تخبرك به — ليس معيارًا.
كيف تستعمل المرمِّز
- اختر الاتجاه والأبجدية. الترميز يحوّل البايتات إلى base58، وفكّ الترميز يفعل العكس. والأبجدية مهمّة — انظر أدناه — وأبجدية البيتكوين هي التي تريدها على الأرجح، إلا أن تكون تعمل مع XRP Ledger.
- اكتب مُدخلك أو الصقه. عند الترميز يمكنك إدخال نصّ عادي أو ستّ عشري، وعند فكّ الترميز الصق نصّ base58. وكل محرف خارج الأبجدية المختارة يُرفض، وتخبرك الأداة أيّه كان.
- انظر إلى اللوحة الثانية. تعرض البايتات نفسها مرمَّزةً بالأبجدية الأخرى، لترى بنفسك كم يختلف الناتجان.
لا وجود لـ base58 معياري، وهذا خطر حقيقي
أقرب شيء إلى مواصفة هو مسوّدة إنترنت من IETF باسم draft-msporny-base58، حالتها المقصودة «إعلامية». وقد انتهت صلاحيتها في الثاني من تشرين الأول 2021 ولم تُنشر قطّ بوصفها RFC. وكل ما عدا ذلك عُرف، والأعراف لا تتّفق.
والأبجديتان في هذه الأداة مأخوذتان من الشيفرة المصدرية للمشروعين اللذين يعرّفانهما: ملف base58.cpp في Bitcoin Core وملف tokens.cpp في rippled. وتستعملان مجموعة المحارف الثمانية والخمسين نفسها بالضبط، وترتّبان ثلاثةً وعشرين منها ترتيبًا مختلفًا. رمّز «Hello, world» بأبجدية البيتكوين تحصل على 2NEpo7TZsLFA2wMeK، وبأبجدية XRP Ledger على p4NFofTZ1LEwpAMeK.
وهذا الاختلاف أخطر من تنافرٍ صريح. فلأن الأبجديتين تحويان المحارف نفسها تمامًا، يكون النصّ الذي تنتجه إحداهما نصًّا صحيح البنية للأخرى دائمًا. فإن أعطيته لمفكِّك مضبوطٍ على العُرف الخطأ لم تحصل على خطأ، بل على بايتات أخرى في صمت. ولا شيء داخل نصّ base58 يدلّ على الأبجدية التي أنتجته، فلا الصيغة تستطيع مساعدتك ولا نحن؛ عليك أن تعرف.
ومن أعراض ذلك الظاهرة ما يحدث للأصفار في المقدّمة. فالبايت الصفري في أول البيانات يصير أول محرف في الأبجدية، وهو 1 في البيتكوين و r في XRP Ledger. فالبايتات الثلاثة نفسها 00 00 01 تُكتب 112 أو rrp بحسب الأبجدية.
قاعدة الأصفار المتقدّمة، ولماذا يُخطئ فيها المطوّرون
base58 حسابٌ محض: عامِل المُدخل عددًا واحدًا ضخمًا واقسمه على 58 مرارًا. وهذا يعمل عملًا تامًّا إلا في أمر واحد — العدد لا يتذكّر أصفاره المتقدّمة. فالبايتان 00 AB و AB عددٌ صحيح واحد، فيُنتج المرمِّز الحسابي المحض الناتج نفسه لكليهما، ويتغيّر حجم بياناتك عند فكّ الترميز.
والعُرف يعالج ذلك خارج الحساب: تُعدّ البايتات الصفرية المتقدّمة قبل بدء القسمة، ثم تُعاد بعدها بمقدار محرف واحد من أول الأبجدية لكل بايت. فهي قاعدة مركّبة على الرياضيات لا نتيجة لها، ولهذا بالذات تُنسى.
وينشر Bitcoin Core واحدًا وعشرين متّجه اختبار لـ base58، سبعة منها تحمل بايتات صفرية متقدّمة — وهي نسبة تبدو مقصودة، لأن التطبيق الذي ينسى القاعدة يجتاز الأربعة عشر الباقية ويبدو سليمًا. وهذا المرمِّز يجتاز الواحد والعشرين في الاتجاهين.
ما لا تفعله هذه الأداة
تفعل base58 لا Base58Check. فعناوين البيتكوين ليست base58 خامًا: بل بايت إصدار، ثم الحمولة، ثم مجموع تحقّق من أربعة بايتات مصنوع بتجزئة SHA-256 مضاعفة، وكلها مرمَّزة معًا. وذلك المجموع هو ما يتيح للمحفظة رفض عنوانٍ فيه خطأ طباعي. فإن لصقت هنا عنوان بيتكوين فُكّ ترميزه إلى بايتات فكًّا صحيحًا، لكن الأداة لن تتحقّق من المجموع ولن تخبرك أن العنوان صالح — فهي مرمِّز لا مدقّق عناوين، والخلط بينهما هو الخيار الأبهى والأقلّ أمانة.
ولا رأي لها كذلك في معنى بايتاتك. فـ base58 وسيلة نقل، لذا يُعرض الناتج المفكوك بالست عشري، وبوصفه نصًّا فقط حين تصادف البايتات أن تكون UTF-8 صالحًا. وحين لا تكون، تقول الأداة ذلك بدل عرض محارف الاستبدال، لأن شاشةً مملوءةً بمعيّناتٍ فيها علامات استفهام توحي بأن ذلك كان نصًّا فتلف، مع أنه في الغالب لم يكن نصًّا قطّ.
لماذا هي مجانية؟
كل شيء يجري في متصفّحك. فلا يُرفع شيء ممّا تلصقه ولا يُسجَّل ولا يُخزَّن — وهذا هنا أهمّ منه في أكثر الصفحات، لأن نصوص base58 كثيرًا ما تكون مفاتيح وعناوين ومعرّفات.
بلا حساب، وبلا تسجيل، وبلا حدود، وبلا علامة مائية على أي شيء تنسخه.