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

วางสตริง 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 ซึ่งเป็นอักขระ 1 เรียงกันสามสิบสองตัว ถอดรหัสได้เป็นไบต์ศูนย์ 32 ไบต์ การแปลงทำงานภายในเบราว์เซอร์ของคุณ

ตัวอย่างจาก Bitcoin, Solana และ IPFS

เลขฐานสิบหกด้านล่างมีการเว้นวรรคเพื่อแสดงส่วนต่าง ๆ

ที่อยู่ Bitcoin (P2PKH, บล็อกเจเนซิส)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
เวอร์ชัน | hash160 (20 ไบต์) | เช็กซัม (4 ไบต์)

คีย์สาธารณะ Solana (โปรแกรม SPL Token)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 ไบต์ ไม่มีไบต์เวอร์ชัน ไม่มีเช็กซัม

IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | ความยาว 32 | ไดเจสต์

ที่อยู่ Bitcoin แบบดั้งเดิม (legacy) ขึ้นต้นด้วย 1 เพราะไบต์เวอร์ชันคือ 00 ส่วนที่อยู่ P2SH ขึ้นต้นด้วย 3 และถอดรหัสได้เวอร์ชัน 05

เช็กซัม Base58Check ยังคงอยู่ในไบต์

ที่อยู่ Bitcoin และคีย์ส่วนตัวแบบ WIF ใช้ Base58Check โดยจะต่อเช็กซัม 4 ไบต์ที่ได้จาก SHA-256 สองชั้นของเพย์โหลดไว้ท้ายข้อมูลก่อนเข้ารหัส หน้านี้ใช้ Base58 ธรรมดา เช็กซัมจึงถูกถอดรหัสเหมือนข้อมูลทั่วไปและปรากฏเป็นเลขฐานสิบหก 8 หลักสุดท้าย hash160 ของที่อยู่แบบดั้งเดิมคือเลขฐานสิบหก 40 หลักที่อยู่ระหว่าง 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 ไบต์

ที่อยู่แบบดั้งเดิมประกอบด้วยเวอร์ชัน 1 ไบต์ hash160 ของคีย์สาธารณะ 20 ไบต์ และเช็กซัม 4 ไบต์ Base58 ธรรมดาจะคืนค่าทั้งสามส่วน คุณจึงได้เลขฐานสิบหก 50 หลัก โดย hash160 คือทุกอย่างที่อยู่ระหว่างไบต์แรกกับสี่ไบต์สุดท้าย

ทำไมเลข 1 ที่นำหน้าทุกตัวจึงกลายเป็น 00

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

ทำไมจึงได้ข้อผิดพลาดว่ามีอักขระไม่ถูกต้อง
ชุดตัวอักษร Bitcoin ไม่มี 0, O, I หรือ l สตริงที่มีอักขระเหล่านี้จึงไม่ใช่ Base58 ที่อยู่ Bitcoin ที่ขึ้นต้นด้วย bc1 ใช้ Bech32 ซึ่งเป็นการเข้ารหัสอีกแบบหนึ่ง ส่วนที่อยู่ Ripple (XRP) ใช้ชุดตัวอักษร Base58 ของตัวเอง ให้ถอดรหัสที่อยู่เหล่านี้ในหน้า Base58 โดยเลือกชุดตัวอักษร Ripple
คีย์สาธารณะ Solana ยาวเท่าใด

ยาว 32 ไบต์พอดี หรือเท่ากับเลขฐานสิบหก 64 หลัก เมื่อเขียนเป็น Base58 มักยาว 43 หรือ 44 อักขระ คีย์ที่ขึ้นต้นด้วยไบต์ศูนย์อาจสั้นกว่านี้ ดังที่เห็นได้จากที่อยู่ของ System Program