ตัวเข้ารหัสและถอดรหัส Base58

แปลงข้อความ ไบต์เลขฐานสิบหก หรือไฟล์ขนาดเล็กเป็น Base58 และแปลงกลับ เลือกชุดตัวอักษร Bitcoin, Flickr หรือ Ripple และเพิ่มหรือตรวจสอบเช็กซัม Base58Check ได้ตามต้องการ

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

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความหรือไบต์เป็น Base58 หรือเลือก “ถอดรหัส” เพื่อแปลงสตริง Base58 กลับเป็นข้อมูล
  2. เลือก “ชุดตัวอักษร” ค่าเริ่มต้นคือ Bitcoin ซึ่งเป็นชุดเดียวกับที่ IPFS และ Solana ใช้
  3. พิมพ์หรือวางอินพุต หากเป็นไบต์ดิบ เช่น แฮชหรือคีย์สาธารณะ ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก”
  4. เปิด “เช็กซัม 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

ชุดตัวอักษรอักขระตามลำดับ
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

ทั้งสามชุดใช้อักขระ 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.isr1Nm3AS7ZcnN
你好2xuZUfBKa

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

ทำไมไบต์ศูนย์ที่นำหน้าจึงกลายเป็น 1
Base58 แปลงอินพุตเป็นตัวเลขเพียงตัวเดียว และไบต์ศูนย์ที่นำหน้าไม่ได้เปลี่ยนค่าของตัวเลขนั้น เพื่อเก็บไบต์เหล่านี้ไว้ ไบต์ศูนย์ที่นำหน้าแต่ละไบต์จะถูกเขียนเป็นอักขระตัวแรกของชุดตัวอักษร ซึ่งในชุดตัวอักษร Bitcoin คือ 1 ไบต์ศูนย์ 32 ไบต์จึงเข้ารหัสเป็นเลข 1 เรียงกัน 32 ตัว
Base58 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่

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

Base58 กับ Base58Check ต่างกันอย่างไร
Base58Check จะต่อเช็กซัม 4 ไบต์ (ส่วนต้นของแฮช SHA-256 สองชั้น) ไว้ท้ายข้อมูลก่อนเข้ารหัส จึงตรวจพบการพิมพ์ผิดได้ เปิดตัวเลือก “เช็กซัม Base58Check” ในหน้านี้ หรือดูรายละเอียดที่หน้า Base58Check
ทำไมอินพุตจึงจำกัดไว้ที่ประมาณ 20 KB
เนื่องจากอินพุตทั้งหมดเป็นตัวเลขขนาดใหญ่ตัวเดียว ปริมาณการคำนวณจึงเพิ่มขึ้นตามกำลังสองของความยาว Base58 ออกแบบมาสำหรับคีย์ แฮช และที่อยู่ ไม่ใช่สำหรับไฟล์ หากข้อมูลมีขนาดใหญ่ให้ใช้ Base64 หรือ Base85