🔐
← Quay lại hướng dẫn

Base64 là gì? Hướng dẫn đầy đủ cho người mới bắt đầu

· Thẻ: base64, encoding, binary-to-text, web-development, data-transfer

Mã hóa Base64 là gì?

Base64 là một sơ đồ mã hóa nhị phân sang văn bản biểu diễn dữ liệu nhị phân dưới dạng chuỗi ASCII sử dụng một bảng chữ cái gồm 64 ký tự. Nó ban đầu được thiết kế cho tệp đính kèm email qua MIME (Multipurpose Internet Mail Extensions) và vẫn là một trong những phương pháp mã hóa được sử dụng rộng rãi nhất trên web.

Khi bạn cần gửi dữ liệu nhị phân — chẳng hạn như hình ảnh, tệp hoặc byte đã nén — qua một kênh được xây dựng cho văn bản, Base64 là giải pháp phù hợp. Nó nhận các byte bất kỳ và biến chúng thành một chuỗi an toàn, dễ mang theo gồm chữ cái, chữ số và một vài ký tự đặc biệt.

Base64 hoạt động như thế nào?

Base64 hoạt động bằng cách xử lý dữ liệu nhị phân theo nhóm ba byte (24 bit) và chuyển đổi mỗi nhóm thành bốn ký tự Base64. Tên "Base64" xuất phát từ thực tế là bảng chữ cái mã hóa sử dụng 64 ký tự khác nhau: A-Z, a-z, 0-9, +/.

Thuật toán mã hóa từng bước

  1. Lấy 3 byte (24 bit) dữ liệu đầu vào
  2. Chia chúng thành bốn nhóm 6 bit
  3. Ánh xạ mỗi giá trị 6 bit (0-63) vào bảng chữ cái Base64
  4. Thêm phần đệm (=) nếu độ dài đầu vào không chia hết cho 3

Đây là một ví dụ cụ thể. Chuỗi "Man" được mã hóa như sau:

  • M (ASCII 77) = 01001101
  • a (ASCII 97) = 01100001
  • n (ASCII 110) = 01101110

Kết hợp: 01001101 01100001 01101110 → chia thành các nhóm 6 bit:

  • 010011 = 19 → T
  • 010110 = 22 → W
  • 000101 = 5 → F
  • 101110 = 46 → u

Vì vậy "Man" trở thành "TWFu".

Còn phần đệm thì sao?

Nếu độ dài đầu vào không phải là bội số của 3 byte, Base64 thêm các ký tự đệm (=) để làm cho đầu ra là bội số của 4 ký tự:

  • 1 byte đầu vào → 2 ký tự Base64 + 2 ký tự đệm (==)
  • 2 byte đầu vào → 3 ký tự Base64 + 1 ký tự đệm (=)

Ví dụ, byte đơn tương ứng với "M" được mã hóa thành TQ==.

Bảng chữ cái Base64

| Giá trị | Ký tự | Giá trị | Ký tự | Giá trị | Ký tự | Giá trị | Ký tự | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |

Các trường hợp sử dụng phổ biến của mã hóa Base64

Tệp đính kèm email (MIME)

Base64 được tạo ra cho MIME (Multipurpose Internet Mail Extensions). Các giao thức email như SMTP được thiết kế cho văn bản ASCII 7-bit, vì vậy các tệp đính kèm nhị phân như PDF, hình ảnh và tệp ZIP phải được mã hóa thành Base64 trước khi gửi qua email.

Data URL trong HTML và CSS

Base64 cho phép bạn nhúng hình ảnh, phông chữ và các phương tiện khác trực tiếp vào tệp HTML hoặc CSS bằng data URL:

<img src="data:image/png;base64,iVBORw0KGgo..." alt="Embedded Image" />

Điều này loại bỏ một yêu cầu HTTP thừa, có thể có lợi cho các tài nguyên nhỏ.

JSON Web Token (JWT)

JWT sử dụng biến thể an toàn cho URL của Base64 (Base64url) để mã hóa header, payload và chữ ký của mỗi token. Đây là lý do bạn thấy các chuỗi như eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 trong các hệ thống xác thực.

Lưu trữ dữ liệu nhị phân trong cơ sở dữ liệu

Nhiều cơ sở dữ liệu được tối ưu hóa cho việc lưu trữ văn bản và có thể không xử lý các byte thô một cách dễ dàng. Mã hóa dữ liệu nhị phân thành Base64 cho phép bạn lưu trữ hình ảnh, đối tượng được tuần tự hóa hoặc dữ liệu được mã hóa trong các cột văn bản.

Payload API

Khi gửi dữ liệu nhị phân qua API REST hoặc GraphQL — đặc biệt ở định dạng JSON — Base64 là lựa chọn tiêu chuẩn vì JSON không thể biểu diễn trực tiếp các byte thô.

Base64 có làm tăng kích thước tệp không?

Có. Mã hóa Base64 làm tăng kích thước dữ liệu khoảng 33%. Cứ mỗi 3 byte đầu vào, bạn nhận được 4 byte đầu ra. Chi phí này là sự đánh đổi để làm cho dữ liệu nhị phân có thể vận chuyển qua các kênh chỉ hỗ trợ văn bản.

Base64 có phải là mã hóa bảo mật (encryption) không?

Không. Đây là một quan niệm sai lầm phổ biến. Base64 là một sơ đồ mã hóa (encoding), không phải mã hóa bảo mật (encryption). Bất kỳ ai nhận được một chuỗi Base64 đều có thể giải mã nó trở về dữ liệu gốc mà không cần bất kỳ khóa nào. Nó không cung cấp bất kỳ tính bảo mật hay bí mật nào. Nếu bạn cần bảo vệ dữ liệu, hãy sử dụng mã hóa bảo mật (như AES) và sau đó tùy chọn mã hóa các byte đã mã hóa bằng Base64 để truyền tải.

Base64 so với các phương pháp mã hóa nhị phân sang văn bản khác

| Mã hóa | Kích thước bảng chữ cái | Chi phí | Tốt nhất cho | |----------|--------------|----------|----------| | Base64 | 64 ký tự | ~33% | Truyền dữ liệu và nhúng | | Base32 | 32 ký tự | ~60% | Ngữ cảnh dễ đọc, không phân biệt hoa thường | | Base16 (Hex) | 16 ký tự | 100% | Gỡ lỗi, bãi rác bộ nhớ, mã màu | | Ascii85 | 85 ký tự | ~25% | Adobe PostScript, luồng PDF |

Base64 cung cấp một sự cân bằng tốt giữa hiệu quả không gian và khả năng tương thích rộng, làm cho nó trở thành phương pháp mã hóa nhị phân sang văn bản phổ biến nhất trên web.

Thử mã hóa Base64 trực tuyến

Sẵn sàng mã hóa dữ liệu của riêng bạn? Sử dụng trình mã hóa và giải mã Base64 trực tuyến miễn phí của chúng tôi để chuyển đổi văn bản hoặc tệp ngay lập tức trong trình duyệt của bạn. Không cần cài đặt hay đăng ký.