محوّل Base58 إلى ست عشري

الصق سلسلة Base58 مثل عنوان Bitcoin أو مفتاح Solana العام أو تجزئة IPFS، واحصل على بايتاتها الخام بالصيغة الست عشرية. يتحوّل كل 1 بادئ إلى البايت 00.

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. الصق سلسلة Base58 في مربع المدخلات. تُتجاهل المسافات وفواصل الأسطر.
  2. اقرأ البايتات الناتجة بالصيغة الست عشرية في المخرجات.
  3. انسخ القيمة الست عشرية، أو انقر «تبديل المدخلات والمخرجات» لتحويل الست عشري إلى Base58 مجددًا.

كيف يتحوّل Base58 إلى ست عشري

يقرأ Base58 السلسلة كلها على أنها عدد واحد كبير مكتوب بأبجدية Bitcoin المكوّنة من 58 حرفًا، والتي تستبعد 0 وO وI وl. ويكتب التحويل إلى الست عشري العدد نفسه بالأساس 16، بخانتين ست عشريتين لكل بايت، فلا يُضاف شيء ولا يضيع شيء.

ليس لبايتات الصفر في بداية البيانات أي قيمة عددية، لذا يسجّل Base58 كلًّا منها على هيئة 1 بادئ، وهو الحرف الأول من أبجديته. ويعيد مفكّك الترميز كل 1 بادئ إلى البايت 00. فمثلًا، يُفك 115Q إلى 0000ff، ويُفك عنوان System Program في Solana، المكوّن من 32 حرف 1 متتاليًا، إلى 32 بايتًا صفريًا. ويجري التحويل محليًا في متصفحك.

أمثلة من Bitcoin وSolana وIPFS

أُضيفت مسافات إلى القيم الست عشرية أدناه لإظهار الأجزاء:

Bitcoin address (P2PKH, genesis block)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
version | hash160 (20 bytes) | checksum (4 bytes)

Solana public key (SPL Token program)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 bytes, no version byte, no checksum

IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | length 32 | digest

تبدأ عناوين Bitcoin القديمة (legacy) بالرقم 1 لأن بايت إصدارها هو 00. أما عناوين P2SH فتبدأ بالرقم 3 وتُفك إلى الإصدار 05.

تبقى مجاميع Base58Check الاختبارية ضمن البايتات

تستخدم عناوين Bitcoin ومفاتيح WIF الخاصة ترميز Base58Check: إذ تُلحق قبل الترميز أربعة بايتات للمجموع الاختباري، مأخوذة من تجزئة SHA-256 مزدوجة للحمولة. وتستخدم هذه الصفحة Base58 العادي، لذا يُفك المجموع الاختباري مثل أي بيانات أخرى ويظهر في آخر 8 خانات ست عشرية. وتجزئة HASH160 في العنوان القديم هي الخانات الست عشرية الأربعون الواقعة بين 00 البادئ والمجموع الاختباري.

للتأكد من سلامة العنوان والحصول على الحمولة دون المجموع الاختباري، فك ترميزه في صفحة Base58Check. ولا تحمل مفاتيح Solana وتجزئات IPFS أي مجموع اختباري، لذا فإن Base58 العادي هو الخيار الصحيح لها.

تحويل Base58 إلى ست عشري في الشيفرة البرمجية

# Python (pip install base58)
import base58
base58.b58decode('115Q').hex()      # '0000ff'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
Buffer.from(bs58.decode('115Q')).toString('hex');   // '0000ff'

الأسئلة الشائعة

لماذا يُفك عنوان Bitcoin إلى 25 بايتًا بدلًا من 20؟

يحتوي العنوان القديم على بايت إصدار واحد، وتجزئة HASH160 للمفتاح العام من 20 بايتًا، ومجموع اختباري من 4 بايتات. ويعيد Base58 العادي الأجزاء الثلاثة كلها، فتحصل على 50 خانة ست عشرية. وتجزئة HASH160 هي كل ما يقع بين البايت الأول والبايتات الأربعة الأخيرة.

لماذا يتحوّل كل 1 بادئ إلى 00؟

يمثّل الحرف 1 في Base58 القيمة صفر. ولو عوملت البيانات على أنها عدد عادي لاختفت بايتات الصفر البادئة، لذا يُكتب كل منها على هيئة 1 ويُفك مجددًا إلى البايت 00.

لماذا تظهر لي رسالة خطأ عن حرف غير صالح؟
لا تحتوي أبجدية Bitcoin على 0 أو O أو I أو l، لذا فإن السلسلة التي تحتوي عليها ليست Base58. وعناوين Bitcoin التي تبدأ بـ bc1 تستخدم Bech32، وهو ترميز مختلف. أما عناوين Ripple (XRP) فتستخدم أبجدية Base58 خاصة بها؛ فك ترميزها في صفحة Base58 بعد اختيار أبجدية Ripple.
ما طول المفتاح العام في Solana؟

32 بايتًا بالضبط، أي 64 خانة ست عشرية. وفي Base58 يكون طوله عادةً 43 أو 44 حرفًا. وقد تكون المفاتيح التي تبدأ ببايتات صفرية أقصر، كما يوضح عنوان System Program.