Cách sử dụng
- Chọn Mã hóa để chuyển văn bản hoặc byte sang Base58, hoặc Giải mã để chuyển một chuỗi Base58 trở lại thành dữ liệu.
- Chọn Bảng ký tự. Bitcoin là lựa chọn mặc định và cũng là bảng ký tự được IPFS và Solana sử dụng.
- Nhập hoặc dán dữ liệu đầu vào. Chuyển đầu vào sang Hex nếu bạn có byte thô như giá trị băm hoặc khóa công khai.
- Chỉ bật Tổng kiểm tra Base58Check khi chuỗi có kèm 4 byte tổng kiểm tra, sau đó sao chép hoặc tải xuống kết quả.
Base58 là gì?
Base58 là một kiểu mã hóa nhị phân thành văn bản được tạo ra cho Bitcoin. Bảng ký tự của nó gồm 62 chữ số và chữ cái Latinh, bỏ đi bốn ký tự dễ nhầm lẫn: 0 (số không), O (chữ o hoa), I (chữ i hoa) và l (chữ L thường). Nó cũng không có +, / hay =, nên bạn có thể chọn cả chuỗi Base58 chỉ bằng một cú nhấp đúp và đưa nó vào URL mà không cần thoát ký tự.
Khác với Base64, Base58 không chia dữ liệu đầu vào thành các nhóm bit. Toàn bộ đầu vào được xem như một số lớn duy nhất và được viết ở cơ số 58, nên không có phần đệm và chỉ một byte thay đổi cũng có thể làm thay đổi nhiều ký tự đầu ra. Các byte 0 ở đầu không mang giá trị số, nên mỗi byte như vậy được ghi bằng ký tự đầu tiên của bảng ký tự (1 trong bảng ký tự Bitcoin) để giữ lại. Đầu ra lớn khoảng 1,37 lần so với đầu vào.
Base58 được dùng ở đâu
- Bitcoin. Địa chỉ kiểu cũ (legacy) và khóa riêng tư WIF đều là Base58Check: Base58 kèm một byte phiên bản và một tổng kiểm tra.
- IPFS. Mã định danh nội dung phiên bản 0 (CIDv0) là dạng Base58 của một multihash SHA-256, vì thế các CID này dài 46 ký tự và bắt đầu bằng
Qm. - Solana. Khóa công khai, địa chỉ tài khoản và chữ ký giao dịch được viết bằng Base58 thuần, không có tổng kiểm tra. Một khóa 32 byte thường trở thành 43 hoặc 44 ký tự.
- Flickr và XRP Ledger. Liên kết rút gọn của Flickr dùng bảng ký tự Flickr, còn địa chỉ XRP dùng bảng ký tự Ripple, đó là lý do chúng bắt đầu bằng
r.
Để chuyển qua lại giữa Base58 và byte thô, hãy dùng Base58 sang Hex và Hex sang Base58. Với các mã định danh chỉ cần gồm chữ và số, hãy tham khảo Base62.
Các bảng ký tự Base58
| Bảng ký tự | Các ký tự, theo thứ tự |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
Cả ba đều dùng cùng 58 ký tự nhưng theo thứ tự khác nhau, nên một chuỗi được mã hóa bằng bảng ký tự này khi giải mã bằng bảng ký tự khác sẽ cho ra các byte khác, hoặc báo lỗi.
Base58 trong mã nguồn
# 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'));
Đặ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% (chuyển đổi số lớn) |
| Phần đệm | Không có (mỗi byte 0 ở đầu thành ký tự 1) |
| Tiêu chuẩn | Bitcoin Base58 |
| Phân biệt hoa thường | Có |
Ví dụ
| Đầu vào (UTF-8) | Đầu ra |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
Câu hỏi thường gặp
Vì sao các byte 0 ở đầu lại trở thành 1?
1 trong bảng ký tự Bitcoin. Đó là lý do 32 byte 0 được mã hóa thành một dãy 32 chữ số 1.Base58 có phân biệt chữ hoa và chữ thường không?
Có. Chữ hoa và chữ thường là các chữ số khác nhau, nên chỉ cần đổi kiểu chữ của một ký tự là các byte giải mã sẽ thay đổi hoặc chuỗi trở nên không hợp lệ.