วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อสร้างสตริง Base58Check หรือเลือก “ถอดรหัส” เพื่อตรวจสอบสตริงและดึงไบต์กลับคืนมา
- หากต้องการเข้ารหัส ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” แล้วป้อนไบต์เวอร์ชันตามด้วยเพย์โหลด เช่น 00 ตามด้วย HASH160 ขนาด 20 ไบต์
- เปิด “เช็กซัม Base58Check” ไว้ เช็กซัมจะถูกต่อท้ายเมื่อเข้ารหัส และถูกตรวจสอบเมื่อถอดรหัส
- หากต้องการถอดรหัส ให้วางสตริงแล้วตั้ง “รูปแบบเอาต์พุต” เป็น “เลขฐานสิบหก” คุณจะได้ไบต์เวอร์ชันและเพย์โหลดโดยไม่มีเช็กซัม
Base58Check ทำงานอย่างไร
- เริ่มจากไบต์เวอร์ชันที่บอกว่าข้อมูลเป็นชนิดใด ตามด้วยเพย์โหลด เช่น แฮชของคีย์สาธารณะขนาด 20 ไบต์
- แฮชไบต์เหล่านี้ด้วย SHA-256 แล้วแฮชผลลัพธ์ด้วย SHA-256 อีกครั้ง จากนั้นเก็บ 4 ไบต์แรกไว้เป็นเช็กซัม
- ต่อเช็กซัมไว้ท้ายข้อมูล แล้วเข้ารหัสทั้งหมดด้วย Base58 ไบต์
0x00ที่นำหน้าแต่ละไบต์จะกลายเป็น1
เครื่องมือนี้คำนวณเช็กซัมจากไบต์ที่คุณป้อนเท่านั้น และจะไม่เพิ่มไบต์เวอร์ชันให้ ดังนั้นให้ใส่ไบต์เวอร์ชันไว้ที่ต้นอินพุตด้วย เมื่อถอดรหัส เครื่องมือจะคำนวณเช็กซัมใหม่จากข้อมูลทั้งหมดยกเว้น 4 ไบต์สุดท้าย หากตรงกัน คุณจะได้ไบต์เวอร์ชันและเพย์โหลด หากไม่ตรงกัน จะแสดงข้อผิดพลาดเรื่องเช็กซัม การพิมพ์ผิดแบบสุ่มจะหลุดรอดการตรวจสอบได้เพียงประมาณหนึ่งครั้งในสี่พันล้านครั้ง
ไบต์เวอร์ชันที่พบบ่อย
| ไบต์เวอร์ชัน | ข้อมูล | สตริงที่เข้ารหัสแล้วขึ้นต้นด้วย |
|---|---|---|
0x00 | ที่อยู่ Bitcoin แบบ P2PKH (HASH160 ขนาด 20 ไบต์) | 1 |
0x05 | ที่อยู่ Bitcoin แบบ P2SH (แฮชของสคริปต์ขนาด 20 ไบต์) | 3 |
0x6F | ที่อยู่ P2PKH บน Bitcoin testnet | m หรือ n |
0x80 | คีย์ส่วนตัวแบบ WIF (32 ไบต์ บวก 0x01 สำหรับคีย์แบบบีบอัด) | 5 หรือ K / L หากเป็นแบบบีบอัด |
ที่อยู่ SegWit และ Taproot ที่ขึ้นต้นด้วย bc1 ใช้ Bech32 ไม่ใช่ Base58Check จึงถอดรหัสในหน้านี้ไม่ได้ ส่วนที่อยู่ XRP Ledger ใช้เช็กซัมแบบเดียวกันแต่ใช้ชุดตัวอักษร Ripple ให้เลือก Ripple ในตัวเลือก “ชุดตัวอักษร”
ตัวอย่าง: จาก HASH160 เป็นที่อยู่
ที่อยู่อันโด่งดังที่เกี่ยวข้องกับบล็อกเจเนซิสของ Bitcoin คือไบต์เวอร์ชัน 00 ตามด้วย HASH160 ขนาด 20 ไบต์ เมื่อป้อนเป็นอินพุตเลขฐานสิบหกและเปิด Base58Check ไว้ จะได้ที่อยู่ที่คุ้นเคยดังนี้
Input (Hex) 00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Output 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
ในโค้ด แพ็กเกจ base58 ของ Python มี b58encode_check() และ b58decode_check() ส่วนแพ็กเกจ npm bs58check มี encode() และ decode()
ข้อกำหนด
| ชุดตัวอักษร | 1-9 A-Z a-z ยกเว้น 0 O I l |
|---|---|
| ขนาดเอาต์พุต | ประมาณ 137% บวกเช็กซัม 4 ไบต์ |
| แพดดิง | ไม่มี |
| มาตรฐาน | Bitcoin Base58Check |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | gTazoqFvnegwaKM8v1B33sR |
Base64.is | 6XgW4KVJr8DBmZEAeJ |
你好 | DrMzxHL43oWHbW |
คำถามที่พบบ่อย
ทำไมการถอดรหัสจึงล้มเหลวด้วยข้อผิดพลาดเรื่องเช็กซัม
เครื่องมือนี้เพิ่มไบต์เวอร์ชันให้หรือไม่
00 สำหรับที่อยู่ Bitcoinถอดรหัสคีย์ส่วนตัวแบบ WIF ได้หรือไม่
80 ตามด้วยคีย์ขนาด 32 ไบต์ และสำหรับคีย์แบบบีบอัดจะมี 01 ต่อท้าย การถอดรหัสทำงานภายในเบราว์เซอร์ของคุณ แต่ถึงอย่างนั้นก็ควรจัดการคีย์ส่วนตัวจริงอย่างระมัดระวังถอดรหัสที่อยู่ bc1 ได้หรือไม่
ไม่ได้ ที่อยู่แบบ Native SegWit และ Taproot ใช้ Bech32 หรือ Bech32m ซึ่งเป็นการเข้ารหัสอีกแบบที่มีเช็กซัมของตัวเอง ใน Bitcoin นั้น Base58Check ใช้เฉพาะกับที่อยู่แบบดั้งเดิมที่ขึ้นต้นด้วย 1 หรือ 3 (m, n หรือ 2 บน testnet) เท่านั้น