Ngôn ngữ: Tiếng Việt

tools / base32

base32/

Chuyển văn bản sang Base32 và ngược lại, theo chuẩn RFC 4648 hoặc Base32Hex. Văn bản được mã hóa theo UTF-8; khi giải mã, chữ thường, dấu cách và thiếu dấu = đều được chấp nhận.

Văn bản gốc

Base32

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

Base32 là gì, khác Base64 thế nào

Base32 viết mỗi 5 byte thành 8 ký tự, lấy từ bảng chỉ có 32 ký tự (cách viết chuẩn là A-Z và 2-7), nên kết quả dài hơn bản gốc khoảng 60%, trong khi Base64 chỉ dài hơn khoảng một phần ba. Đổi lại, Base32 không phân biệt chữ hoa chữ thường và không có các chữ số 0, 1, 8, 9 nên khó nhầm với các chữ cái O, I, B. Điều này phù hợp khi chép tay, đọc thành tiếng và ở những nơi không phân biệt hoa thường, ví dụ khóa 2FA và tên tệp.

Nên chọn Base32 chuẩn hay Base32Hex

Base32 bạn gặp hằng ngày, gồm khóa 2FA và kết quả mặc định của hầu hết thư viện, đều là biến thể chuẩn (RFC 4648 mục 6, bảng ký tự A-Z, 2-7). Base32Hex (mục 7, bảng ký tự 0-9, A-V) có đặc điểm là thứ tự sắp xếp của chuỗi sau khi mã hóa giống với thứ tự sắp xếp của các byte gốc, nên được dùng ở những nơi cần sắp xếp như NSEC3 của DNSSEC. Hai loại không giải mã được của nhau: chọn sai thường báo "không phải ký tự Base32", cũng có thể ra một đống ký tự loạn.

Khóa 2FA có phải Base32 không, làm sao giải mã ra xem

Có. Secret của TOTP (tham số secret trong liên kết otpauth:// của mã QR, hoặc khóa nhập tay) thường là Base32 chuẩn, thường viết hoa, không có =, có nơi hiển thị cách nhau bằng dấu cách theo từng nhóm 4 ký tự; khi giải mã ở đây đều nhận được. Kết quả giải mã là các byte ngẫu nhiên chứ không phải chữ, nên cần đánh dấu "Hiển thị kết quả dạng hex" mới xem được, ví dụ JBSWY3DPEHPK3PXP là 48 65 6c 6c 6f 21 de ad be ef. Muốn tạo mã xác thực động, hãy dùng công cụ 2FA của trang này.

Giải mã báo "Độ dài không hợp lệ", "không phải ký tự Base32" hoặc "Dấu = chỉ được nằm ở cuối" thì phải làm sao

"Độ dài không hợp lệ" nghĩa là sau khi bỏ dấu =, số ký tự chia cho 8 dư 1, 3 hoặc 6; Base32 hợp lệ chỉ có thể dư 0, 2, 4, 5 hoặc 7, nên nhiều khả năng khi sao chép đã bị thiếu ký tự. "Không phải ký tự Base32" sẽ chỉ ra đó là ký tự thứ mấy: biến thể chuẩn không có 0, 1, 8, 9, cũng không có dấu câu và ký tự toàn chiều rộng; nếu nội dung có cả 0-9 và A-V thì có thể là Base32Hex, hãy đổi biến thể. "Dấu = chỉ được nằm ở cuối" nghĩa là phía sau dấu = vẫn còn nội dung, có thể là vài chuỗi bị dán nối với nhau, cần giải mã riêng từng chuỗi. Dấu cách, xuống dòng, chữ thường và thiếu dấu = đều không gây lỗi.

Dấu = ở cuối là gì, bỏ đi được không

Dấu = dùng để bù độ dài cho chia hết cho 8, không thuộc về dữ liệu. Khi giải mã, có hay không đều được; khi mã hóa, "Thêm padding =" được đánh dấu sẵn theo mặc định, không cần thì bỏ đánh dấu. Bỏ được hay không còn tùy bên nhận: định dạng liên kết otpauth của Google Authenticator nói secret không cần padding và thường được bỏ, còn base64.b32decode của Python thì bắt buộc phải có, thiếu sẽ báo Incorrect padding.

Kết quả giải mã bị loạn chữ, hoặc báo không phải văn bản UTF-8 hợp lệ thì phải làm sao

Nghĩa là các byte giải mã được không phải văn bản UTF-8. Khóa 2FA, giá trị hash và dữ liệu đã mã hóa vốn là dữ liệu nhị phân; hãy đánh dấu "Hiển thị kết quả dạng hex" để xem các byte gốc. Công cụ này chỉ hiển thị văn bản theo UTF-8. Nếu văn bản gốc dùng GBK hoặc bảng mã khác, hãy đánh dấu hex trước, rồi dùng công cụ văn bản / hex của trang này và chọn GBK để chuyển các byte về văn bản.

Vì sao kết quả mã hóa khác với kết quả tính bằng Python hoặc ngôn ngữ khác

Hãy kiểm tra ba điểm. Thứ nhất, cuối nội dung nhập có thừa xuống dòng hoặc dấu cách không: công cụ này mã hóa nguyên văn theo UTF-8 và không cắt khoảng trắng ở hai đầu. Thứ hai, biến thể có giống nhau không: trong Python, cách viết chuẩn là base64.b32encode, còn Base32Hex là base64.b32hexencode (có từ 3.10). Thứ ba, có bật padding = hay không. Các biến thể dùng bảng ký tự khác như Crockford, z-base-32 không được hỗ trợ, kết quả sẽ không giống.

Nội dung tôi nhập có bị tải lên không

Không. Việc mã hóa và giải mã đều diễn ra trong trình duyệt, không gửi yêu cầu nào và không lưu gì; khóa 2FA không rời khỏi trình duyệt của bạn.