แปลงเลขฐานสิบหก (Hex) เป็น Base58

วางไบต์เลขฐานสิบหกแล้วรับสตริง Base58 แบบที่ Bitcoin, Solana และ IPFS ใช้ ไบต์ 00 ที่นำหน้าแต่ละไบต์จะกลายเป็นเลข 1 ที่นำหน้า ส่วนไบต์อื่นทั้งหมดจะถูกเก็บไว้ตรงตามเดิม

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. วางไบต์เลขฐานสิบหกลงในช่องอินพุต ใส่ช่องว่าง ทวิภาค และตัวนำหน้า 0x ได้
  2. อ่านผลลัพธ์ Base58 ที่ช่องเอาต์พุต
  3. คัดลอกผลลัพธ์ หรือกด “สลับอินพุตและเอาต์พุต” เพื่อถอดรหัส Base58 กลับเป็นเลขฐานสิบหก

เลขฐานสิบหกกลายเป็น Base58 ได้อย่างไร

ขั้นแรก เลขฐานสิบหกจะถูกแปลงเป็นไบต์ โดยใช้สองหลักต่อหนึ่งไบต์ อินพุตจึงต้องมีจำนวนหลักเป็นเลขคู่ จากนั้นไบต์ทั้งหมดจะถูกอ่านเป็นตัวเลขแบบ big-endian ตัวเดียวและเขียนใหม่ในฐาน 58 ด้วยชุดตัวอักษร Bitcoin ไบต์ 00 ที่นำหน้าแต่ละไบต์จะเขียนเป็น 1 นี่คือเหตุผลที่ 0000ff กลายเป็น 115Q ขณะที่ ff เพียงอย่างเดียวกลายเป็น 5Q

Base58 ใช้ประมาณ 1.37 อักขระต่อไบต์ เลขฐานสิบหก 64 หลัก (32 ไบต์) จึงเหลือ 43 หรือ 44 อักขระ ชุดตัวอักษรนี้ไม่มี 0, O, I, l, + หรือ / ผลลัพธ์จึงอ่านออกเสียงได้ง่าย เลือกได้ด้วยการดับเบิลคลิก และใส่ใน URL ได้ ทุกอย่างคำนวณในเบราว์เซอร์ของคุณ

การสร้างตัวระบุของ Solana และ IPFS

  • Solana: ที่อยู่คือคีย์สาธารณะ Ed25519 ขนาด 32 ไบต์ในรูป Base58 โดยไม่มีตัวนำหน้าและไม่มีเช็กซัม วางคีย์เลขฐานสิบหก 64 หลักเพื่อรับที่อยู่
  • IPFS CIDv0: CIDv0 คือ multihash แบบ sha2-256 ในรูป Base58 ใส่ 1220 ไว้หน้าไดเจสต์ 64 หลัก แล้วคุณจะได้สตริงยาว 46 อักขระที่ขึ้นต้นด้วย Qm ไดเจสต์ต้องเป็นค่าที่ IPFS คำนวณจากบล็อกที่เข้ารหัสแล้ว ซึ่งไม่ใช่ค่าเดียวกับ SHA-256 ของไฟล์ต้นฉบับ
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

ที่อยู่ Bitcoin ต้องมีเช็กซัม

hash160 เพียงอย่างเดียวยังไม่ใช่ที่อยู่ ที่อยู่ Bitcoin แบบดั้งเดิม (legacy) คือ Base58Check ของไบต์เวอร์ชัน 00 ตามด้วย hash160 ขนาด 20 ไบต์ ซึ่งจะต่อเช็กซัม SHA-256 สองชั้นขนาด 4 ไบต์ไว้ท้ายก่อนเข้ารหัส หากเข้ารหัส 00 และ hash160 ด้วย Base58 ธรรมดา จะได้สตริงที่สั้นกว่าและไม่มีเช็กซัม ซึ่งวอลเล็ตจะไม่ยอมรับ

ให้ใช้หน้า Base58Check แทน โดยตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” ป้อน 00 ตามด้วย hash160 แล้วระบบจะเพิ่มเช็กซัมให้ หากเลขฐานสิบหกของคุณลงท้ายด้วยเช็กซัมที่ถูกต้องอยู่แล้ว หน้านี้จะให้ที่อยู่เดียวกัน

0062e907b15cbf27d5425399ebf6f0fb50ebb88f18    (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

การแปลงเลขฐานสิบหกเป็น Base58 ในโค้ด

# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff'))     # b'115Q'

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

คำถามที่พบบ่อย

จะแปลง hash160 เป็นที่อยู่ Bitcoin ได้อย่างไร
ใส่ไบต์เวอร์ชัน 00 ไว้ข้างหน้า แล้วเข้ารหัสด้วย Base58Check ไม่ใช่ Base58 ธรรมดา หน้า Base58Check ทำขั้นตอนนี้ให้เมื่อคุณป้อนไบต์เป็นเลขฐานสิบหก
ทำไมผลลัพธ์จึงขึ้นต้นด้วยเลข 1 หลายตัว

เพราะเลขฐานสิบหกของคุณขึ้นต้นด้วยไบต์ 00 จำนวนเท่ากัน Base58 เก็บไบต์เหล่านี้ไว้เป็นเลข 1 ที่นำหน้า เพื่อให้กู้คืนได้เมื่อถอดรหัสสตริง

ทำไมอินพุตเลขฐานสิบหกของฉันจึงไม่ผ่าน

เลขฐานสิบหกต้องมีจำนวนหลักเป็นเลขคู่ และมีเฉพาะอักขระ 0-9 และ a-f จะเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กก็ได้ ช่องว่าง ทวิภาค และตัวนำหน้า 0x จะถูกลบออกโดยอัตโนมัติ ส่วนอักขระอื่น เช่น ตัวอักษร g ที่หลุดเข้ามาหรือหลักที่ขาดหายไป จะถือเป็นข้อผิดพลาด

หน้านี้ใช้ชุดตัวอักษร Base58 แบบใด
ใช้ชุดตัวอักษร Bitcoin ซึ่ง Solana, IPFS และโปรเจกต์ส่วนใหญ่ก็ใช้เช่นกัน หากต้องการชุดตัวอักษร Flickr หรือ Ripple ให้ไปที่หน้า Base58 เลือกชุดตัวอักษรที่นั่น แล้วป้อนอินพุตเป็นไบต์เลขฐานสิบหก