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

Chuyển văn bản, byte hex hoặc tệp sang Base32 của Douglas Crockford và ngược lại. Bộ giải mã chấp nhận cả lỗi gõ: không phân biệt hoa thường, bỏ qua dấu gạch nối, đọc O thành 0 và I hoặc L thành 1.

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 sang Crockford Base32, hoặc Giải mã để chuyển trở lại thành văn bản.
  2. Giữ nguyên biến thể Crockford đã chọn và đảm bảo Phần đệm đang tắt. Bật Chữ thường nếu muốn đầu ra chữ thường.
  3. Nhập hoặc dán dữ liệu đầu vào, hoặc mở một tệp. Khi giải mã, dấu gạch nối và dấu cách được bỏ qua.
  4. Sao chép kết quả hoặc tải xuống dưới dạng tệp.

Crockford Base32 là gì?

Douglas Crockford thiết kế bảng ký tự Base32 này cho các mã định danh mà con người đọc, gõ và nói thành lời. Nó dùng mười chữ số và 22 chữ cái in hoa: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. Các chữ I và L bị loại vì trông giống chữ số 1, chữ O vì trông giống 0, còn chữ U bị loại để giảm khả năng vô tình tạo thành những từ tục tĩu.

Mỗi ký hiệu mang 5 bit, nên 5 byte trở thành 8 ký tự, giống hệt Base32 RFC 4648. Các ký hiệu được xếp theo thứ tự ASCII tăng dần, nên các chuỗi không đệm cùng một kiểu chữ được sắp xếp theo đúng thứ tự của dữ liệu mà chúng mã hóa. Đặc tả của Crockford không dùng phần đệm, vì vậy hãy luôn tắt tùy chọn Phần đệm.

Giải mã dễ tính

Đặc tả của Crockford yêu cầu bộ giải mã chấp nhận những gì người dùng thực sự gõ, và công cụ này làm đúng như vậy:

  • Chữ hoa và chữ thường được xử lý như nhau.
  • Chữ O được đọc thành chữ số 0, còn các chữ I và L được đọc thành 1.
  • Dấu gạch nối, vốn có thể được chèn vào để mã dài dễ đọc hơn, được bỏ qua, và dấu cách cùng ký tự xuống dòng cũng vậy.

Chữ U không hợp lệ và sẽ được báo lỗi kèm theo vị trí.

Byte, số và ULID

Crockford mô tả cách mã hóa của ông dựa trên số, trong khi công cụ này mã hóa một dãy byte theo từng nhóm 5 bit, theo cách của RFC 4648, với các ký hiệu của Crockford. Khi số bit không phải bội số của 5, các cài đặt dựa trên số đặt các bit 0 thừa ở đầu, còn công cụ này đặt chúng ở cuối, nên kết quả có thể khác nhau.

ULID là một ví dụ phổ biến. Nó dùng bảng ký tự Crockford nhưng mã hóa giá trị 128 bit của mình dưới dạng một số gồm 26 ký tự, nên 16 byte của một ULID khi mã hóa tại đây không cho ra cùng chuỗi, và giải mã một ULID sẽ cho các byte bị lệch hai bit. Ký hiệu kiểm tra tùy chọn trong đặc tả của Crockford, một ký tự bổ sung cho giá trị modulo 37, không được hỗ trợ: công cụ này không thêm cũng không kiểm tra nó.

Đặc tả

Bảng ký tự0-9 A-Z, trừ I L O U
Kích thước đầu ra8 ký tự cho mỗi 5 byte (160%)
Phần đệmKhông có
Tiêu chuẩnCrockford Base32 (2002)
Phân biệt hoa thườngKhông

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

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

Crockford Base32 có phân biệt chữ hoa chữ thường không?

Không. Đầu ra mặc định là chữ hoa, và tùy chọn Chữ thường chuyển nó sang chữ thường. Bộ giải mã chấp nhận cả hai, kể cả khi lẫn lộn trong cùng một chuỗi.

Vì sao bảng ký tự thiếu I, L, O và U?

I và L dễ bị nhầm với 1, còn O dễ bị nhầm với 0, nên chúng bị loại và được đọc thành các chữ số đó khi giải mã. U bị loại để các mã ngẫu nhiên ít có khả năng tạo thành từ tiếng Anh thô tục.

Công cụ này có hỗ trợ ký hiệu kiểm tra của Crockford không?
Không. Đặc tả cho phép thêm một ký tự tùy chọn chứa tổng kiểm tra modulo 37, dùng các ký hiệu bổ sung * ~ $ = U. Công cụ này không thêm hay kiểm tra ký tự đó, nên hãy bỏ ký hiệu kiểm tra trước khi giải mã.
Có thể giải mã ULID tại đây không?

Không thể ra đúng 16 byte của nó. ULID mã hóa 128 bit thành một số với các bit thừa ở đầu, trong khi công cụ này làm việc với các nhóm byte và đặt chúng ở cuối. Hãy dùng một thư viện ULID để đọc phần dấu thời gian và phần ngẫu nhiên.