Cách sử dụng
- Chọn Mã hóa để chuyển văn bản sang Base32, hoặc Giải mã để chuyển Base32 trở lại thành văn bản.
- Chọn biến thể. RFC 4648 là mặc định và cũng là biến thể được dùng cho mã bí mật TOTP và hầu hết các thư viện.
- Nhập hoặc dán dữ liệu đầu vào, hoặc mở một tệp. Kết quả được cập nhật ngay khi bạn gõ.
- Sao chép kết quả hoặc tải xuống dưới dạng tệp.
Base32 là gì?
Base32 biểu diễn dữ liệu nhị phân bằng 32 ký tự in được. Mỗi ký tự mang 5 bit, nên cứ 5 byte đầu vào trở thành 8 ký tự đầu ra. Đầu ra lớn hơn đầu vào khoảng 60%, tốn kém hơn Base64, nhưng bảng ký tự tránh được chữ thường và các ký hiệu dễ nhầm lẫn.
Bảng ký tự tiêu chuẩn được định nghĩa trong RFC 4648 dùng các chữ cái A-Z và các chữ số 2-7. Các chữ số 0, 1, 8 và 9 bị loại bỏ để không bị nhầm với các chữ O, I và B. Khi độ dài đầu vào không phải bội số của 5 byte, đầu ra được đệm bằng = cho đủ bội số của 8 ký tự.
Base32 được dùng ở đâu
- Xác thực hai yếu tố. Mã bí mật TOTP và HOTP trong các ứng dụng xác thực (giá trị
secret=trong liên kếtotpauth://) là chuỗi Base32. - Hệ thống không phân biệt chữ hoa chữ thường. Vì bảng ký tự chỉ có một kiểu chữ, Base32 vẫn nguyên vẹn khi đi qua các hệ thống tệp, nhãn DNS và địa chỉ email bỏ qua chữ hoa chữ thường.
- Mã do người gõ. Khóa bản quyền, địa chỉ onion và các mã định danh ngắn dùng Base32 để dễ đọc to và dễ gõ hơn.
Nếu kích thước quan trọng hơn khả năng đọc, Base64 gọn hơn. Nếu bạn cần mã định danh ngắn không có ký tự gây nhầm lẫn, hãy so sánh Crockford Base32 và Base58.
Các biến thể Base32
| Biến thể | Bảng ký tự | Ứng dụng điển hình |
|---|---|---|
| RFC 4648 | A-Z 2-7 | Mã bí mật TOTP, mục đích chung |
| Base32hex | 0-9 A-V | Thứ tự sắp xếp khớp với byte gốc, DNSSEC NSEC3 |
| Crockford | 0-9 A-Z không có I, L, O, U | ID dễ đọc, ULID |
| z-base-32 | chữ thường, sắp xếp lại | Khóa thân thiện với con người, OpenPGP WKD, ZRTP |
Base32 trong mã nguồn
# Python
import base64
base64.b32encode(b'hello') # mã hóa
base64.b32decode('NBSWY3DP') # giải mã
// Node.js không có sẵn Base32; hãy dùng một gói như "hi-base32"
// Go (import "encoding/base32")
base32.StdEncoding.EncodeToString(data)
Đặc tả
| Bảng ký tự | A-Z 2-7 |
|---|---|
| Kích thước đầu ra | 8 ký tự cho mỗi 5 byte (160%) |
| Phần đệm | Thêm = cho đủ bội số của 8 ký tự |
| Tiêu chuẩn | RFC 4648, mục 6 |
| Phân biệt hoa thường | Không |
Ví dụ
| Đầu vào (UTF-8) | Đầu ra |
|---|---|
Hello, World! | JBSWY3DPFQQFO33SNRSCC=== |
Base64.is | IJQXGZJWGQXGS4Y= |
你好 | 4S62BZNFXU====== |
Câu hỏi thường gặp
Base32 có phân biệt chữ hoa chữ thường không?
Bảng ký tự RFC 4648 được định nghĩa bằng chữ hoa, nhưng bộ giải mã này cũng chấp nhận đầu vào chữ thường. Hãy dùng tùy chọn Chữ thường nếu bạn cần đầu ra chữ thường.
Vì sao chuỗi Base32 của tôi kết thúc bằng các dấu =?
Các dấu bằng là phần đệm để lấp đầy khối cuối cùng cho đủ 8 ký tự. Nhiều hệ thống, kể cả hầu hết ứng dụng TOTP, chấp nhận Base32 không có phần đệm. Hãy tắt Phần đệm để loại bỏ chúng.
Base32 lớn hơn dữ liệu gốc bao nhiêu?
Cứ 5 byte trở thành 8 ký tự, nên đầu ra Base32 có kích thước khoảng 1,6 lần đầu vào. Base64 là khoảng 1,33 lần.
Có thể giải mã mã bí mật TOTP bằng công cụ này không?
Có. Hãy dán mã bí mật vào thẻ Giải mã và chọn đầu ra dạng Hex để xem các byte gốc của khóa. Dấu cách trong mã bí mật được bỏ qua.