Cách sử dụng
- Dán chuỗi bạn muốn kiểm tra vào ô đầu vào.
- Đọc kết luận: Base64 hợp lệ hay Base64 không hợp lệ, Biến thể được phát hiện (tiêu chuẩn hoặc an toàn cho URL) và Dung lượng sau giải mã.
- Nếu mục Vấn đề liệt kê lỗi, hãy dựa vào vị trí được báo để tìm ký tự không hợp lệ, khoảng trắng hoặc phần đệm sai chỗ.
- Xem mục Nội dung để biết dữ liệu là văn bản hay một tệp như PNG, PDF hoặc ZIP.
Điều kiện để Base64 hợp lệ
- Bảng ký tự. Chỉ cho phép
A-Z,a-z,0-9và thêm hai ký tự:+và/trong Base64 tiêu chuẩn,-và_trong Base64URL. Chuỗi trộn lẫn cả hai cặp thường đã bị hỏng hoặc được ghép từ hai nguồn khác nhau. - Phần đệm. Dấu
=chỉ được xuất hiện ở cuối và tối đa hai lần. Phần đệm ở giữa chuỗi thường có nghĩa là hai giá trị đã mã hóa bị nối vào nhau. - Độ dài. Khi có phần đệm, độ dài là bội số của 4. Khi không có phần đệm, độ dài nào cũng được trừ 4n + 1: một ký tự lẻ còn dư chỉ chứa 6 bit, không đủ cho một byte.
Các bộ giải mã nghiêm ngặt còn thêm một quy tắc: các bit thấp không dùng đến của ký tự cuối cùng phải bằng 0. Nhiều bộ giải mã bỏ qua các bit này, nhưng một số, chẳng hạn base64.StdEncoding.Strict() của Go, sẽ từ chối chuỗi.
Các lỗi thường gặp và cách khắc phục
| Vấn đề | Nguyên nhân thường gặp | Cách khắc phục |
|---|---|---|
| Ký tự không hợp lệ | Dấu ngoặc kép, dấu gạch chéo ngược hoặc chuỗi thoát %2B và %3D bị sao chép kèm theo giá trị | Xóa các ký tự thừa hoặc giải mã URL trước |
| Dấu cách ở giữa | + bị biến thành dấu cách khi giá trị đi qua URL hoặc biểu mẫu | Đặt lại dấu +, hoặc dùng Base64URL cho URL |
| Độ dài 4n + 1 | Giá trị bị cắt do giới hạn độ rộng cột, dòng log hoặc sao chép thiếu | Sao chép lại toàn bộ giá trị |
| Phần đệm ở giữa | Hai chuỗi Base64 bị nối vào nhau | Tách ra và giải mã riêng từng phần |
| Ký tự xuống dòng | Ngắt dòng kiểu MIME hoặc PEM | Thường vô hại; hãy xóa đi khi nơi sử dụng yêu cầu một dòng duy nhất |
Hợp lệ không có nghĩa là có ý nghĩa
Base64 không có header cũng không có tổng kiểm tra, nên tính hợp lệ chỉ cho biết chuỗi có thể giải mã được. Nhiều từ thông thường cũng vượt qua: bốn chữ cái bất kỳ đều tạo thành một nhóm hợp lệ. Đó là lý do công cụ còn giải mã dữ liệu và báo cáo dung lượng cùng loại nội dung. Văn bản đọc được hoặc chữ ký tệp (file signature) quen thuộc như PNG, PDF hay ZIP là bằng chứng tốt cho thấy chuỗi thực sự là Base64; vài byte ngẫu nhiên thì không. Để thử cả các kiểu mã hóa khác, hãy dùng công cụ nhận dạng mã hóa.
Kiểm tra Base64 trong mã nguồn
// JavaScript: Base64 tiêu chuẩn có phần đệm (cũng khớp với chuỗi rỗng)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: báo lỗi thay vì bỏ qua ký tự không hợp lệ
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
Câu hỏi thường gặp
Vì sao một từ thông thường lại được báo là Base64 hợp lệ?
test giải mã thành ba byte. Hãy xem loại nội dung được phát hiện: nếu kết quả không phải văn bản đọc được cũng không phải loại tệp đã biết, có lẽ đầu vào vốn không phải Base64.Base64 có dấu cách hoặc ký tự xuống dòng có hợp lệ không?
MIME và PEM ngắt Base64 thành nhiều dòng, và hầu hết bộ giải mã đều bỏ qua khoảng trắng. Tuy nhiên, các trường JSON, header HTTP, JWT và data URI cần một chuỗi liền mạch. Công cụ liệt kê khoảng trắng riêng để bạn tự quyết định điều đó có quan trọng ở nơi chuỗi sẽ được dùng hay không.
Base64 không có phần đệm = có hợp lệ không?
= cho đến khi độ dài là bội số của 4. Chuỗi không có phần đệm dài 4n + 1 ký tự không bao giờ hợp lệ.Làm sao để kiểm tra một chuỗi có phải Base64 trong JavaScript?
atob() bên trong try/catch. Lưu ý rằng atob() ném lỗi InvalidCharacterError với đầu vào sai nhưng lại âm thầm chấp nhận khoảng trắng và việc thiếu phần đệm, đồng thời không chấp nhận các ký tự an toàn cho URL.