วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความหรือไบต์เป็น Base58 หรือเลือก “ถอดรหัส” เพื่อแปลงสตริง Base58 กลับเป็นข้อมูล
- เลือก “ชุดตัวอักษร” ค่าเริ่มต้นคือ Bitcoin ซึ่งเป็นชุดเดียวกับที่ IPFS และ Solana ใช้
- พิมพ์หรือวางอินพุต หากเป็นไบต์ดิบ เช่น แฮชหรือคีย์สาธารณะ ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก”
- เปิด “เช็กซัม Base58Check” เฉพาะเมื่อสตริงมีเช็กซัม 4 ไบต์ จากนั้นกด “คัดลอก” หรือ “ดาวน์โหลด” เพื่อรับผลลัพธ์
Base58 คืออะไร
Base58 คือการเข้ารหัสข้อมูลไบนารีเป็นข้อความที่สร้างขึ้นสำหรับ Bitcoin ชุดตัวอักษรของมันประกอบด้วยตัวเลขและตัวอักษรละติน 62 ตัว แต่ตัดอักขระสี่ตัวที่ดูคล้ายกันจนสับสนง่ายออก ได้แก่ 0 (เลขศูนย์) O (โอตัวใหญ่) I (ไอตัวใหญ่) และ l (แอลตัวเล็ก) นอกจากนี้ยังไม่มี +, / หรือ = จึงเลือกสตริง Base58 ทั้งหมดได้ด้วยการดับเบิลคลิก และใส่ลงใน URL ได้โดยไม่ต้องแปลงอักขระใด ๆ
Base58 ต่างจาก Base64 ตรงที่ไม่ได้ตัดอินพุตเป็นกลุ่มบิต แต่มองอินพุตทั้งหมดเป็นตัวเลขขนาดใหญ่ตัวเดียวแล้วเขียนในฐาน 58 จึงไม่มีแพดดิง และการเปลี่ยนไบต์เพียงไบต์เดียวอาจทำให้อักขระเอาต์พุตเปลี่ยนไปหลายตัว ไบต์ศูนย์ที่นำหน้าไม่มีค่าทางตัวเลข จึงต้องเขียนแต่ละไบต์เป็นอักขระตัวแรกของชุดตัวอักษร (1 ในชุดตัวอักษร Bitcoin) เพื่อเก็บไว้ เอาต์พุตมีขนาดประมาณ 1.37 เท่าของอินพุต
Base58 ใช้ที่ไหนบ้าง
- Bitcoin ที่อยู่แบบดั้งเดิม (legacy) และคีย์ส่วนตัวแบบ WIF ใช้ Base58Check ซึ่งก็คือ Base58 ที่มีไบต์เวอร์ชันและเช็กซัม
- IPFS ตัวระบุเนื้อหาเวอร์ชัน 0 (CIDv0) คือ multihash แบบ SHA-256 ในรูป Base58 CID เหล่านี้จึงยาว 46 อักขระและขึ้นต้นด้วย
Qmเสมอ - Solana คีย์สาธารณะ ที่อยู่บัญชี และลายเซ็นธุรกรรมเขียนเป็น Base58 ธรรมดาที่ไม่มีเช็กซัม คีย์ขนาด 32 ไบต์มักกลายเป็น 43 หรือ 44 อักขระ
- Flickr และ XRP Ledger ลิงก์แบบสั้นของ Flickr ใช้ชุดตัวอักษร Flickr ส่วนที่อยู่ XRP ใช้ชุดตัวอักษร Ripple จึงขึ้นต้นด้วย
r
หากต้องการแปลงระหว่าง Base58 กับไบต์ดิบ ให้ใช้ Base58 เป็นเลขฐานสิบหก และ เลขฐานสิบหกเป็น Base58 สำหรับตัวระบุที่ต้องการเพียงตัวอักษรและตัวเลข ลองเปรียบเทียบกับ Base62
ชุดตัวอักษรของ Base58
| ชุดตัวอักษร | อักขระตามลำดับ |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
ทั้งสามชุดใช้อักขระ 58 ตัวเดียวกันแต่เรียงลำดับต่างกัน สตริงที่เข้ารหัสด้วยชุดตัวอักษรหนึ่งจึงถอดรหัสได้ไบต์ที่ต่างออกไป หรือถอดรหัสไม่สำเร็จเมื่อใช้อีกชุดหนึ่ง
การใช้ Base58 ในโค้ด
# Python (pip install base58)
import base58
base58.b58encode(b'hello') # b'Cn8eVZg'
base58.b58decode('Cn8eVZg') # b'hello'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));
ข้อกำหนด
| ชุดตัวอักษร | 1-9 A-Z a-z ยกเว้น 0 O I l |
|---|---|
| ขนาดเอาต์พุต | ประมาณ 137% (แปลงแบบเลขจำนวนใหญ่) |
| แพดดิง | ไม่มี (ไบต์ศูนย์ที่นำหน้าจะกลายเป็น 1) |
| มาตรฐาน | Bitcoin Base58 |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
คำถามที่พบบ่อย
ทำไมไบต์ศูนย์ที่นำหน้าจึงกลายเป็น 1
1 ไบต์ศูนย์ 32 ไบต์จึงเข้ารหัสเป็นเลข 1 เรียงกัน 32 ตัวBase58 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่
แยก ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเป็นหลักที่มีค่าต่างกัน การเปลี่ยนตัวพิมพ์ของอักขระเพียงตัวเดียวจึงทำให้ไบต์ที่ถอดรหัสได้เปลี่ยนไป หรือทำให้สตริงไม่ถูกต้อง