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

Chuyển văn bản, byte hex hoặc tệp sang Base32 và ngược lại. Chọn bảng ký tự RFC 4648, Base32hex, Crockford hoặc z-base-32, đồng thời tùy chỉnh phần đệm và kiểu chữ hoa thường.

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 Base32, hoặc Giải mã để chuyển Base32 trở lại thành văn bản.
  2. 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.
  3. 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õ.
  4. 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ết otpauth://) 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 4648A-Z 2-7Mã bí mật TOTP, mục đích chung
Base32hex0-9 A-VThứ tự sắp xếp khớp với byte gốc, DNSSEC NSEC3
Crockford0-9 A-Z không có I, L, O, UID dễ đọc, ULID
z-base-32chữ thường, sắp xếp lạiKhó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 ra8 ký tự cho mỗi 5 byte (160%)
Phần đệmThêm = cho đủ bội số của 8 ký tự
Tiêu chuẩnRFC 4648, mục 6
Phân biệt hoa thườngKhông

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!JBSWY3DPFQQFO33SNRSCC===
Base64.isIJQXGZJWGQXGS4Y=
你好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.