Tất cả bài viết

Base64: mã hóa để làm gì và hoạt động ra sao

Base64 là cách biểu diễn dữ liệu nhị phân tùy ý dưới dạng văn bản chỉ gồm chữ cái, chữ số và các ký tự +, /, =. Nó không nén hay mã hóa bảo mật dữ liệu — kết quả lớn hơn khoảng một phần ba, và bất kỳ ai biết thuật toán đều có thể đọc được nội dung gốc.

Mã hóa hoạt động như thế nào

Các byte đầu vào được nhóm theo bộ ba (24 bit) và chia thành bốn khối sáu bit. Mỗi khối tương ứng với một ký tự trong bảng chữ cái Base64 (A–Z, a–z, 0–9, +, /). Nếu độ dài dữ liệu đầu vào không chia hết cho ba byte, ký tự đệm = sẽ được thêm vào cuối.

Dùng để làm gì

Nhiều giao thức và định dạng — email (MIME), URL, JSON, XML — được thiết kế cho văn bản và không xử lý tốt các byte "thô": byte null, ký tự điều khiển hoặc chuỗi xung đột với cú pháp của định dạng. Base64 giải quyết vấn đề này bằng cách biến bất kỳ dữ liệu nhị phân nào thành văn bản an toàn.

Các trường hợp sử dụng phổ biến

  • Tệp đính kèm email qua MIME.
  • Gửi hình ảnh hoặc tệp nhỏ trong API JSON.
  • Lưu dữ liệu nhị phân trong các trường văn bản của cơ sở dữ liệu hoặc tệp cấu hình.
  • Mã hóa các phần header và payload của JWT.

Base64 KHÔNG PHẢI là gì

Đây không phải là mã hóa bảo mật hay hàm băm. Bất kỳ ai cũng có thể giải mã một chuỗi Base64 để lấy lại dữ liệu gốc mà không cần khóa hay mật khẩu — nó chỉ là một định dạng biểu diễn, không phải biện pháp bảo mật.

Bảng chữ cái chuẩn và bảng chữ cái an toàn cho URL

Bảng chữ cái Base64 cổ điển dùng ký tự +/, vốn mang ý nghĩa đặc biệt trong URL và tên tệp. Với những trường hợp này có biến thể Base64URL, trong đó + được thay bằng -, còn / được thay bằng _. Nếu chèn kết quả mã hóa chuẩn vào URL mà không percent-encoding thêm, các ký tự +/ có thể làm sai lệch địa chỉ hoặc xung đột với dấu phân cách đường dẫn.

Lỗi thường gặp: ký tự đệm bị cắt hoặc "hỏng"

Ký tự = ở cuối chuỗi không phải là rác, mà là một phần của mã hóa cho biết có bao nhiêu byte còn thiếu trong khối cuối cùng. Nếu sao chép chuỗi Base64 không đầy đủ hoặc xóa ký tự đệm thủ công, bộ giải mã sẽ báo lỗi hoặc trả về kết quả bị cắt cụt. Một số hệ thống (ví dụ JWT) cố tình bỏ =, và khi đó cần khôi phục lại độ dài trước khi giải mã.

Dùng thử công cụ