Công cụ mã hóa và giải mã Base58Check

Thêm 4 byte tổng kiểm tra SHA-256 kép rồi mã hóa sang Base58, hoặc giải mã một chuỗi Base58Check, kiểm tra tổng kiểm tra và đọc byte phiên bản cùng phần dữ liệu.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Chọn Mã hóa để tạo một chuỗi Base58Check, hoặc Giải mã để kiểm tra chuỗi và khôi phục các byte của nó.
  2. Để mã hóa, đặt đầu vào là Hex và nhập byte phiên bản, theo sau là phần dữ liệu, ví dụ 00 và một HASH160 dài 20 byte.
  3. Giữ tùy chọn Tổng kiểm tra Base58Check ở trạng thái bật. Tổng kiểm tra được thêm vào khi mã hóa và được kiểm tra khi giải mã.
  4. Để giải mã, dán chuỗi vào và đặt đầu ra là Hex. Bạn sẽ nhận được byte phiên bản và phần dữ liệu, không kèm tổng kiểm tra.

Base58Check hoạt động như thế nào

  1. Bắt đầu bằng một byte phiên bản cho biết dữ liệu là gì, theo sau là phần dữ liệu, chẳng hạn giá trị băm khóa công khai dài 20 byte.
  2. Băm các byte này bằng SHA-256, băm kết quả bằng SHA-256 thêm một lần nữa, rồi giữ lại 4 byte đầu tiên làm tổng kiểm tra.
  3. Nối tổng kiểm tra vào cuối và mã hóa toàn bộ bằng Base58. Mỗi byte 0x00 ở đầu trở thành một ký tự 1.

Công cụ này tính tổng kiểm tra trên đúng các byte bạn nhập. Nó không tự thêm byte phiên bản, vì vậy hãy đặt byte đó ở đầu dữ liệu đầu vào. Khi giải mã, công cụ tính lại tổng kiểm tra trên toàn bộ dữ liệu trừ 4 byte cuối. Nếu khớp, bạn nhận được byte phiên bản và phần dữ liệu; nếu không, bạn sẽ thấy lỗi tổng kiểm tra. Một lỗi gõ ngẫu nhiên chỉ lọt qua khoảng một lần trong bốn tỷ lần thử.

Các byte phiên bản thường gặp

Byte phiên bảnDữ liệuChuỗi mã hóa bắt đầu bằng
0x00Địa chỉ Bitcoin P2PKH (HASH160 dài 20 byte)1
0x05Địa chỉ Bitcoin P2SH (giá trị băm script dài 20 byte)3
0x6FĐịa chỉ P2PKH trên mạng thử nghiệm (testnet) Bitcoinm hoặc n
0x80Khóa riêng tư WIF (32 byte, cộng thêm 0x01 nếu là khóa nén)5, hoặc K / L nếu là khóa nén

Địa chỉ SegWit và Taproot bắt đầu bằng bc1 dùng Bech32 chứ không phải Base58Check, nên không thể giải mã tại đây. Địa chỉ XRP Ledger dùng cùng kiểu tổng kiểm tra với bảng ký tự Ripple: hãy chọn Ripple trong tùy chọn Bảng ký tự.

Ví dụ: từ HASH160 đến địa chỉ

Địa chỉ nổi tiếng gắn với khối nguyên thủy (genesis block) của Bitcoin gồm byte phiên bản 00, theo sau là một HASH160 dài 20 byte. Khi nhập ở dạng đầu vào Hex và bật Tổng kiểm tra Base58Check, bạn sẽ nhận được địa chỉ quen thuộc:

Đầu vào (Hex)  00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Đầu ra         1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

Trong mã nguồn, gói base58 của Python cung cấp b58encode_check() và b58decode_check(), còn gói npm bs58check có encode() và decode().

Đặc tả

Bảng ký tự1-9 A-Z a-z, trừ 0 O I l
Kích thước đầu raKhoảng 137%, cộng thêm 4 byte tổng kiểm tra
Phần đệmKhông có
Tiêu chuẩnBitcoin Base58Check
Phân biệt hoa thườngCó

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!gTazoqFvnegwaKM8v1B33sR
Base64.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

Câu hỏi thường gặp

Vì sao giải mã thất bại với lỗi tổng kiểm tra?
Có thể một ký tự đã bị gõ sai, bảng ký tự được chọn không đúng, hoặc chuỗi chỉ là Base58 thuần không có tổng kiểm tra. Các chuỗi Base58 thuần, chẳng hạn địa chỉ Solana và CID của IPFS, nên được giải mã trên trang Base58.
Công cụ có tự thêm byte phiên bản cho tôi không?
Không. Tổng kiểm tra được tính trên các byte bạn nhập, nên byte phiên bản phải là một phần của dữ liệu đầu vào. Hãy chuyển đầu vào sang Hex và nhập byte đó trước tiên, ví dụ 00 cho địa chỉ Bitcoin.
Tôi có thể giải mã khóa riêng tư WIF không?
Có. Dán khóa vào thẻ Giải mã và chọn đầu ra Hex. Bạn sẽ nhận được 80, khóa 32 byte và, với khóa nén, thêm 01 ở cuối. Việc giải mã chạy cục bộ trong trình duyệt của bạn, nhưng dù vậy vẫn nên cẩn trọng với khóa riêng tư thật.
Tôi có thể giải mã địa chỉ bc1 không?

Không. Địa chỉ Native SegWit và Taproot dùng Bech32 hoặc Bech32m, một kiểu mã hóa khác với tổng kiểm tra riêng. Trong Bitcoin, Base58Check chỉ được dùng cho các địa chỉ kiểu cũ bắt đầu bằng 1 hoặc 3 (m, n hoặc 2 trên testnet).