Cách sử dụng
- 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ó.
- Để 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.
- 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ã.
- Để 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
- 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.
- 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.
- 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ản | Dữ liệu | Chuỗ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) Bitcoin | m hoặc n |
0x80 | Khó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 ra | Khoảng 137%, cộng thêm 4 byte tổng kiểm tra |
| Phần đệm | Không có |
| Tiêu chuẩn | Bitcoin Base58Check |
| Phân biệt hoa thường | Có |
Ví dụ
| Đầu vào (UTF-8) | Đầu ra |
|---|---|
Hello, World! | gTazoqFvnegwaKM8v1B33sR |
Base64.is | 6XgW4KVJr8DBmZEAeJ |
你好 | 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ông cụ có tự thêm byte phiên bản cho tôi không?
00 cho địa chỉ Bitcoin.Tôi có thể giải mã khóa riêng tư WIF không?
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).