Công cụ kiểm tra Base64

Dán một chuỗi để biết nó có phải Base64 hợp lệ hay không. Công cụ cho biết biến thể, chỉ ra ký tự không hợp lệ và lỗi phần đệm, đồng thời cho bạn biết dữ liệu sau khi giải mã là gì.

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. Dán chuỗi bạn muốn kiểm tra vào ô đầu vào.
  2. Đọ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ã.
  3. 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ỗ.
  4. 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-9 và 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ặpCá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 + 1Giá trị bị cắt do giới hạn độ rộng cột, dòng log hoặc sao chép thiếuSao chép lại toàn bộ giá trị
Phần đệm ở giữaHai chuỗi Base64 bị nối vào nhauTách ra và giải mã riêng từng phần
Ký tự xuống dòngNgắt dòng kiểu MIME hoặc PEMThườ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ệ?
Vì nó thực sự hợp lệ. Bất kỳ dãy ký tự nào thuộc bảng ký tự với độ dài phù hợp đều giải mã ra một số byte; ví dụ, từ 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?
Thường là có. Base64URL thường lược bỏ phần đệm, và RFC 4648 cho phép bỏ nó khi độ dài đã được biết từ ngữ cảnh. Một số bộ giải mã nghiêm ngặt vẫn yêu cầu phần đệm; nếu hệ thống từ chối chuỗi, hãy thêm dấu = 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?
Với Base64 có phần đệm theo cách kiểm tra nghiêm ngặt, hãy so khớp chuỗi với một biểu thức chính quy cho phép các nhóm bốn ký tự thuộc bảng ký tự, theo sau là phần đệm tùy chọn. Cách nhanh hơn là gọi 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.