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

Chuyển văn bản, byte hex hoặc tệp nhỏ sang Base58 và ngược lại. Chọn bảng ký tự Bitcoin, Flickr hoặc Ripple, và tùy ý thêm hoặc kiểm tra tổng kiểm tra Base58Check.

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 để 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.
  2. 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.
  3. 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.
  4. 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ự
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

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 raKhoảng 137% (chuyển đổi số lớn)
Phần đệmKhông có (mỗi byte 0 ở đầu thành ký tự 1)
Tiêu chuẩnBitcoin Base58
Phân biệt hoa thườngCó

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!72k1xXWG59fYdzSNoA
Base64.isr1Nm3AS7ZcnN
你好2xuZUfBKa

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

Vì sao các byte 0 ở đầu lại trở thành 1?
Base58 chuyển dữ liệu đầu vào thành một số duy nhất, và các byte 0 ở đầu không làm thay đổi giá trị của số đó. Để giữ chúng lại, mỗi byte 0 ở đầu được ghi bằng ký tự đầu tiên của bảng ký tự, tức 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ệ.

Base58 và Base58Check khác nhau thế nào?
Base58Check thêm 4 byte tổng kiểm tra (phần đầu của giá trị băm SHA-256 kép) trước khi mã hóa, nhờ đó có thể phát hiện lỗi gõ sai. Hãy bật tùy chọn Tổng kiểm tra Base58Check tại đây, hoặc xem trang Base58Check để biết chi tiết.
Vì sao dữ liệu đầu vào bị giới hạn ở khoảng 20 KB?
Vì toàn bộ đầu vào là một số lớn duy nhất, khối lượng tính toán tăng theo bình phương độ dài của nó. Base58 được thiết kế cho khóa, giá trị băm và địa chỉ, không phải cho tệp. Với dữ liệu lớn, hãy dùng Base64 hoặc Base85.