Cách sử dụng
- Chọn Mã hóa để chuyển văn bản sang Base45, hoặc Giải mã để chuyển Base45 trở lại thành văn bản hoặc byte.
- Nhập hoặc dán dữ liệu đầu vào, hoặc mở một tệp. Hãy giữ nguyên mọi dấu cách: chúng là một phần của bảng ký tự.
- Khi giải mã dữ liệu nhị phân như phần dữ liệu của chứng nhận, hãy chuyển đầu ra sang Hex.
- Sao chép kết quả hoặc tải xuống dưới dạng tệp.
Base45 là gì?
Base45 được định nghĩa trong RFC 9285. Bảng ký tự của nó gồm các chữ số 0-9, các chữ cái in hoa A-Z và chín ký hiệu: dấu cách và $ % * + - . / :. Đây chính xác là 45 ký tự mà mã QR có thể lưu ở chế độ chữ và số (alphanumeric) gọn nhẹ. Lưu ý rằng dấu cách là một ký tự thực sự của bảng ký tự, không phải dấu phân cách.
Bộ mã hóa lấy đầu vào theo từng cặp hai byte, đọc chúng như một số từ 0 đến 65535 và viết số đó thành ba chữ số Base45, chữ số có trọng số thấp nhất đứng trước. Một byte lẻ ở cuối trở thành hai ký tự. Ở dạng văn bản, kết quả có kích thước gấp 1,5 lần đầu vào, lớn hơn Base64.
Vì sao Base45 phù hợp với mã QR
Ở chế độ chữ và số, mã QR gói hai ký tự vào 11 bit. Base64 không dùng được chế độ này vì cần chữ thường, nên phải chuyển sang chế độ byte với 8 bit cho mỗi ký tự, tức khoảng 10,7 bit cho mỗi byte dữ liệu. Base45 chỉ cần 8,25 bit cho mỗi byte ở chế độ chữ và số, nên cùng một dữ liệu vừa với mã QR nhỏ hơn và dễ quét hơn.
Khi giải mã, hãy giữ nguyên các dấu cách; chỉ ký tự xuống dòng được bỏ qua. Chữ thường không thuộc bảng ký tự và sẽ bị báo là không hợp lệ.
Giải mã Chứng nhận COVID kỹ thuật số của EU
Mã QR của Chứng nhận COVID kỹ thuật số của EU chứa văn bản bắt đầu bằng HC1:. Phần còn lại là Base45: dữ liệu chứng nhận được mã hóa dạng CBOR, ký bằng COSE, nén bằng zlib rồi mã hóa Base45. Để xem bên trong:
- Bỏ tiền tố
HC1:. Bốn ký tự của nó đều là Base45 hợp lệ, nên nếu để lại sẽ cho ra byte sai. - Giải mã phần còn lại tại đây với đầu ra dạng Hex. Dữ liệu zlib thường bắt đầu bằng byte
78. - Giải nén các byte bằng zlib và phân tích CBOR bằng một công cụ khác.
Công cụ này chỉ xử lý bước Base45. Nó không giải nén, không phân tích dữ liệu và không xác minh chữ ký.
Base45 trong mã nguồn
# Python (pip install base45)
import base45
base45.b45encode(b'AB') # ví dụ trong RFC 9285: BB8
base45.b45decode('BB8') # b'AB'
Đặc tả
| Bảng ký tự | 0-9 A-Z dấu cách $ % * + - . / : |
|---|---|
| Kích thước đầu ra | 3 ký tự cho mỗi 2 byte (150%) |
| Phần đệm | Không có |
| Tiêu chuẩn | RFC 9285 |
| Phân biệt hoa thường | Có |
Ví dụ
| Đầu vào (UTF-8) | Đầu ra |
|---|---|
Hello, World! | %69 VDK2E:3404ESVDX0 |
Base64.is | SH8LQEG%61*5P2 |
你好 | C-SEFK*.K |
Câu hỏi thường gặp
Vì sao đầu ra Base45 có dấu cách?
Dấu cách là một trong 45 ký tự của bảng ký tự, nên nó mang dữ liệu. Đừng cắt bỏ hay gộp các dấu cách trong văn bản Base45, nếu không việc giải mã sẽ thất bại hoặc cho ra byte sai.
Làm sao giải mã một chuỗi HC1:?
Bỏ tiền tố HC1:, giải mã phần còn lại với đầu ra dạng Hex, rồi giải nén kết quả bằng zlib và đọc dữ liệu CBOR bằng một công cụ riêng. Công cụ này chỉ thực hiện bước Base45.
Base45 có phân biệt chữ hoa chữ thường không?
Có. Chỉ chữ in hoa thuộc bảng ký tự, vì chế độ chữ và số của mã QR không có chữ thường. Đầu vào chữ thường sẽ bị báo là không hợp lệ, kèm theo vị trí.
Base45 có gọn hơn Base64 không?
Ở dạng văn bản thuần thì không: Base45 có kích thước gấp 1,5 lần đầu vào, còn Base64 khoảng 1,33 lần. Bên trong mã QR thì có, vì Base45 có thể dùng chế độ chữ và số với mật độ cao hơn.