วิธีใช้งาน
- วางสตริง Base58 ลงในช่องอินพุต ระบบจะข้ามช่องว่างและการขึ้นบรรทัดใหม่
- อ่านไบต์ที่ถอดรหัสแล้วในรูปเลขฐานสิบหกที่ช่องเอาต์พุต
- คัดลอกเลขฐานสิบหก หรือกด “สลับอินพุตและเอาต์พุต” เพื่อแปลงเลขฐานสิบหกกลับเป็น 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
ทำไมจึงได้ข้อผิดพลาดว่ามีอักขระไม่ถูกต้อง
คีย์สาธารณะ Solana ยาวเท่าใด
ยาว 32 ไบต์พอดี หรือเท่ากับเลขฐานสิบหก 64 หลัก เมื่อเขียนเป็น Base58 มักยาว 43 หรือ 44 อักขระ คีย์ที่ขึ้นต้นด้วยไบต์ศูนย์อาจสั้นกว่านี้ ดังที่เห็นได้จากที่อยู่ของ System Program