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

ต่อเช็กซัม SHA-256 สองชั้นขนาด 4 ไบต์แล้วเข้ารหัสเป็น Base58 หรือถอดรหัสสตริง Base58Check ตรวจสอบเช็กซัม แล้วอ่านไบต์เวอร์ชันและเพย์โหลด

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

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อสร้างสตริง Base58Check หรือเลือก “ถอดรหัส” เพื่อตรวจสอบสตริงและดึงไบต์กลับคืนมา
  2. หากต้องการเข้ารหัส ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” แล้วป้อนไบต์เวอร์ชันตามด้วยเพย์โหลด เช่น 00 ตามด้วย HASH160 ขนาด 20 ไบต์
  3. เปิด “เช็กซัม Base58Check” ไว้ เช็กซัมจะถูกต่อท้ายเมื่อเข้ารหัส และถูกตรวจสอบเมื่อถอดรหัส
  4. หากต้องการถอดรหัส ให้วางสตริงแล้วตั้ง “รูปแบบเอาต์พุต” เป็น “เลขฐานสิบหก” คุณจะได้ไบต์เวอร์ชันและเพย์โหลดโดยไม่มีเช็กซัม

Base58Check ทำงานอย่างไร

  1. เริ่มจากไบต์เวอร์ชันที่บอกว่าข้อมูลเป็นชนิดใด ตามด้วยเพย์โหลด เช่น แฮชของคีย์สาธารณะขนาด 20 ไบต์
  2. แฮชไบต์เหล่านี้ด้วย SHA-256 แล้วแฮชผลลัพธ์ด้วย SHA-256 อีกครั้ง จากนั้นเก็บ 4 ไบต์แรกไว้เป็นเช็กซัม
  3. ต่อเช็กซัมไว้ท้ายข้อมูล แล้วเข้ารหัสทั้งหมดด้วย Base58 ไบต์ 0x00 ที่นำหน้าแต่ละไบต์จะกลายเป็น 1

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

ไบต์เวอร์ชันที่พบบ่อย

ไบต์เวอร์ชันข้อมูลสตริงที่เข้ารหัสแล้วขึ้นต้นด้วย
0x00ที่อยู่ Bitcoin แบบ P2PKH (HASH160 ขนาด 20 ไบต์)1
0x05ที่อยู่ Bitcoin แบบ P2SH (แฮชของสคริปต์ขนาด 20 ไบต์)3
0x6Fที่อยู่ P2PKH บน Bitcoin testnetm หรือ 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.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

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

ทำไมการถอดรหัสจึงล้มเหลวด้วยข้อผิดพลาดเรื่องเช็กซัม
อาจเป็นเพราะพิมพ์อักขระผิด เลือกชุดตัวอักษรผิด หรือสตริงนั้นเป็น Base58 ธรรมดาที่ไม่มีเช็กซัม สตริง Base58 ธรรมดา เช่น ที่อยู่ Solana และ IPFS CID ควรถอดรหัสในหน้า Base58
เครื่องมือนี้เพิ่มไบต์เวอร์ชันให้หรือไม่
ไม่เพิ่ม เช็กซัมคำนวณจากไบต์ที่คุณป้อน ไบต์เวอร์ชันจึงต้องเป็นส่วนหนึ่งของอินพุต ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” แล้วพิมพ์ไบต์เวอร์ชันไว้ก่อน เช่น 00 สำหรับที่อยู่ Bitcoin
ถอดรหัสคีย์ส่วนตัวแบบ WIF ได้หรือไม่
ได้ วางคีย์ในแท็บ “ถอดรหัส” แล้วเลือกเอาต์พุตเป็น “เลขฐานสิบหก” คุณจะได้ 80 ตามด้วยคีย์ขนาด 32 ไบต์ และสำหรับคีย์แบบบีบอัดจะมี 01 ต่อท้าย การถอดรหัสทำงานภายในเบราว์เซอร์ของคุณ แต่ถึงอย่างนั้นก็ควรจัดการคีย์ส่วนตัวจริงอย่างระมัดระวัง
ถอดรหัสที่อยู่ bc1 ได้หรือไม่

ไม่ได้ ที่อยู่แบบ Native SegWit และ Taproot ใช้ Bech32 หรือ Bech32m ซึ่งเป็นการเข้ารหัสอีกแบบที่มีเช็กซัมของตัวเอง ใน Bitcoin นั้น Base58Check ใช้เฉพาะกับที่อยู่แบบดั้งเดิมที่ขึ้นต้นด้วย 1 หรือ 3 (m, n หรือ 2 บน testnet) เท่านั้น