Cách sử dụng
- Chọn Mã hóa để chuyển văn bản sang Base32hex, hoặc Giải mã để chuyển Base32hex trở lại thành văn bản.
- Giữ nguyên biến thể Base32hex đã chọn. Tắt Phần đệm hoặc chuyển sang Chữ thường nếu định dạng của bạn yêu cầu.
- 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.
Base32hex là gì?
Base32hex là "Base 32 Encoding with Extended Hex Alphabet" (mã hóa Base32 với bảng ký tự hex mở rộng) được định nghĩa trong mục 7 của RFC 4648. Nó hoạt động giống hệt Base32 tiêu chuẩn: mỗi ký tự mang 5 bit, cứ 5 byte trở thành 8 ký tự, và đầu ra được đệm bằng = cho đủ bội số của 8. Chỉ có bảng ký tự là khác. Thay vì A-Z 2-7, Base32hex đếm tiếp từ chỗ hệ thập lục phân dừng lại: các chữ số 0 đến 9 ứng với giá trị 0 đến 9, A là 10 và V là 31.
Vì hai bảng ký tự có chung phần lớn ký tự, một chuỗi Base32hex thường có thể được đưa vào bộ giải mã Base32 tiêu chuẩn mà không gặp lỗi, nhưng các byte thu được lại sai. Hãy luôn giải mã bằng đúng biến thể đã dùng để mã hóa.
Giữ nguyên thứ tự sắp xếp
Bảng ký tự được xếp theo thứ tự ASCII tăng dần và giá trị của mỗi ký tự tăng theo vị trí của nó. Nhờ vậy, so sánh hai chuỗi Base32hex theo từng ký tự cho ra cùng thứ tự với việc so sánh các byte bên dưới. RFC 4648 nêu rõ đây là đặc tính mà Base32 tiêu chuẩn và Base64 không có, và nó khiến Base32hex rất phù hợp làm khóa trong các kho lưu trữ có sắp xếp như cơ sở dữ liệu và kho khóa-giá trị.
Hãy giữ mọi chuỗi ở cùng một kiểu chữ, và tắt phần đệm khi các đầu vào có độ dài khác nhau: dấu = được xếp giữa các chữ số và các chữ cái nên có thể làm sai thứ tự.
Base32hex trong DNSSEC NSEC3
Bản ghi NSEC3, được định nghĩa trong RFC 5155, chứng minh rằng một tên DNS không tồn tại, đồng thời gây khó khăn cho việc liệt kê mọi tên trong vùng. Mỗi tên được băm bằng SHA-1, và giá trị băm 20 byte được viết thành một nhãn Base32hex dài 32 ký tự không có phần đệm, thường hiển thị bằng chữ thường. Vì cách mã hóa giữ nguyên thứ tự của các giá trị băm, các tên đã băm tạo thành một chuỗi có thứ tự. Để biến một giá trị băm thành nhãn như vậy, hãy dán nó làm đầu vào dạng Hex, tắt Phần đệm và chọn Chữ thường. Công cụ này chỉ thực hiện bước mã hóa; nó không tính giá trị băm NSEC3 có salt và lặp nhiều vòng.
Base32hex trong mã nguồn
# Python 3.10+
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
Đặc tả
| Bảng ký tự | 0-9 A-V |
|---|---|
| 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 7 |
| Phân biệt hoa thường | Không |
Ví dụ
| Đầu vào (UTF-8) | Đầu ra |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
Câu hỏi thường gặp
Base32 và Base32hex khác nhau thế nào?
A-Z 2-7; Base32hex dùng 0-9 A-V, giúp giữ nguyên thứ tự sắp xếp của dữ liệu. Hai dạng này không thể thay thế cho nhau.Base32hex có phân biệt chữ hoa chữ thường không?
Bảng ký tự đượ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 bật Chữ thường nếu bạn cần đầu ra chữ thường, ví dụ cho nhãn DNS.
Có nên dùng phần đệm không?
= cho đủ bội số của 8 ký tự, nhưng nhiều định dạng, kể cả NSEC3, bỏ phần đệm. Bộ giải mã chấp nhận cả hai, nên hãy chọn theo yêu cầu của hệ thống nhận dữ liệu.