Menu

Mã hóa / Giải mã Base64

Mã hóa hoặc giải mã chuỗi và tệp Base64 ngay lập tức.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Base64 là gì?

Base64 là một cơ chế mã hóa biểu diễn dữ liệu nhị phân bằng 64 ký tự in được. Lập trình viên dùng nó mỗi khi một hệ thống chỉ hỗ trợ văn bản cần chở theo các byte: ảnh nhỏ nhúng trong HTML, token, tệp đính kèm email, data URL, chuỗi bí mật dán trong log và các trường JSON chứa dữ liệu nhị phân.

Base64 là *mã hóa dạng biểu diễn* (encoding), không phải mã hóa bảo mật (encryption). Giải mã một chuỗi Base64 thường cho ra nội dung gốc ngay lập tức, nên đừng bao giờ coi nó là một lớp bảo mật. Mọi thứ nằm trong Base64 về cơ bản là công khai, trừ khi đã được mã hóa bảo mật *trước khi* chuyển sang Base64.

Bên dưới, Base64 lấy 3 byte (24 bit) và viết lại thành 4 ký tự thuộc một bảng chữ cái cố định 64 ký tự (từ A đến Z, từ a đến z, từ 0 đến 9, +, /). Khi độ dài đầu vào không chia hết cho 3, bộ mã hóa thêm một hoặc hai ký tự = ở cuối để đệm (padding). Đó là lý do chuỗi Base64 thường kết thúc bằng =.

Bạn sẽ học được gì khi dùng Base64

  • Mã hóa dạng biểu diễn chỉ thay đổi cách thể hiện dữ liệu, không che giấu hay bảo vệ dữ liệu: ai cũng có thể giải mã.
  • Kết quả Base64 lớn khoảng 4/3 so với số byte gốc, nên tiện lợi nhưng không tiết kiệm dung lượng.
  • Ký tự đệm như = hoàn thiện nhóm 4 ký tự cuối cùng và xuất hiện bình thường trong nhiều chuỗi Base64.
  • Có hai biến thể liên quan: Base64 chuẩn (dùng + và /) và Base64URL (dùng - và _ để an toàn trong URL và JWT).

Cách mã hóa và giải mã Base64 từng bước

  1. Chọn chiều chuyển đổi

    Chọn Mã hóa nếu bạn có văn bản thường hoặc một tệp và muốn nhận kết quả Base64. Chọn Giải mã nếu bạn có chuỗi Base64 và muốn lấy lại nội dung gốc.

  2. Dán dữ liệu hoặc thả tệp vào

    Dán một chuỗi vào ô văn bản, hoặc kéo một tệp (ảnh, PDF, bất cứ thứ gì) vào vùng thả tệp. Tệp được chuyển thành data: URL, sẵn sàng nhúng vào HTML hoặc CSS.

  3. Đọc kết quả

    Kết quả mã hóa là chuỗi Base64. Kết quả giải mã là văn bản gốc, hoặc nếu đầu vào là một tệp thì các byte khôi phục được hiển thị dưới dạng liên kết tải xuống.

  4. Sao chép kết quả

    Nhấn nút sao chép để đưa kết quả vào bộ nhớ tạm. Mọi thứ chạy trong trình duyệt, nên dữ liệu của bạn không bao giờ rời khỏi máy.

Tra cứu nhanh Base64

Những thành phần bạn sẽ gặp lại liên tục khi làm việc với Base64, theo định nghĩa của RFC 4648.

Thành phầnÝ nghĩaVí dụ
Bảng chữ cái64 ký tự mà Base64 chuẩn sử dụngA–Z, a–z, 0–9, +, /
Bảng chữ cái an toàn cho URLDùng trong JWT và URLA–Z, a–z, 0–9, -, _
Ký tự đệmĐệm nhóm cuối khi độ dài không chia hết cho 3= hoặc ==
Kích thước nhómSố byte mỗi khối mã hóa → 4 ký tự đầu ra3 byte → 4 ký tự
Độ dài tăng thêmĐầu ra lớn hơn đầu vào khoảng 33%100 B → 136 ký tự
Data URLNhúng tệp trực tiếp vào HTML/CSSdata:image/png;base64,...

Ví dụ Base64 để thử

Giải mã một cụm từ đơn giản

Đã mã hóa

SGVsbG8gV29ybGQ=

Đã giải mã

Hello World

Dấu = ở cuối là ký tự đệm vì Hello World dài 11 byte, không chia hết cho 3. Khi giải mã, ký tự này luôn được loại bỏ chính xác.

Mã hóa một payload JSON nhỏ

Bản gốc
{"role":"student","active":true}
Base64

eyJyb2xlIjoic3R1ZGVudCIsImFjdGl2ZSI6dHJ1ZX0=

Token JWT mã hóa từng phần đúng như thế này. Vì vậy payload JWT thường bắt đầu bằng eyJ, chính là dạng Base64 của {".

Nhận biết một data URL

Data URL

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgAAIAAAUAAen8GVAAAAAASUVORK5CYII=

Phần tiền tố khai báo kiểu dữ liệu (image/png) và cách mã hóa (base64). Mọi thứ sau dấu phẩy là nội dung tệp. Rất hữu ích cho ảnh siêu nhỏ cần tải cùng trang.

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

Chuẩn

Pj4/Pyc+Pg==

An toàn cho URL

Pj4_Pyc-Pg

Base64 an toàn cho URL thay + bằng - và / bằng _, nhờ đó giá trị có thể nằm trong URL mà không cần escape thêm. JWT dùng biến thể này.

Lỗi Base64 thường gặp

  • Gọi Base64 là "đã mã hóa bảo mật". Ai cũng có thể giải mã nó mà không cần mật khẩu hay khóa.
  • Quên rằng văn bản Unicode cần được chuyển thành byte UTF-8 *trước khi* mã hóa Base64, nếu không các ký tự ngoài ASCII (như chữ tiếng Việt có dấu) sẽ bị sai khi chuyển đi rồi chuyển về.
  • Tự tay xóa ký tự đệm = rồi đưa kết quả vào một bộ giải mã nghiêm ngặt vốn cần ký tự đó. (Bộ giải mã an toàn cho URL thường chấp nhận thiếu ký tự đệm, còn bộ giải mã chuẩn thì có thể không.)
  • Nhúng ảnh lớn dưới dạng Base64 vào CSS hoặc HTML trong khi một URL tệp thông thường sẽ nhỏ hơn, nhanh hơn và dễ cache hơn.

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

Mã hóa Base64 là gì?

Base64 là cách mã hóa biểu diễn dữ liệu nhị phân thành văn bản in được bằng bảng chữ cái 64 ký tự. Nó được dùng ở bất cứ đâu cần truyền byte qua một hệ thống chỉ hỗ trợ văn bản: API, JSON, JWT, email, data URL.

Base64 hoạt động như thế nào?
Base64 lấy 3 byte đầu vào (24 bit) và chia thành bốn nhóm 6 bit. Mỗi nhóm 6 bit được ánh xạ sang một trong 64 ký tự. Nếu độ dài đầu vào không phải bội số của 3 byte, một hoặc hai ký tự = được thêm vào để đệm.
Làm sao để giải mã một chuỗi Base64?
Dán chuỗi vào một bộ giải mã Base64. Kết quả là văn bản hoặc tệp gốc. Trong code, hầu hết ngôn ngữ đều có sẵn hàm: atob() trong trình duyệt, Buffer.from(str, 'base64') trong Node.js, base64.b64decode() trong Python.
Base64 có an toàn không?

Không. Base64 là mã hóa dạng biểu diễn, không phải mã hóa bảo mật. Nó được thiết kế để biểu diễn và truyền dữ liệu, không phải để giữ bí mật. Nếu cần bảo mật, hãy mã hóa dữ liệu trước rồi mới chuyển bản mã sang Base64.

Vì sao chuỗi Base64 đôi khi kết thúc bằng =?
= là ký tự đệm. Base64 tạo ra 4 ký tự cho mỗi 3 byte đầu vào. Khi độ dài đầu vào không chia hết cho 3, một hoặc hai dấu = được thêm vào để độ dài kết quả luôn là bội số của 4.
Base64 có mã hóa được hình ảnh không?
Có. Byte của ảnh có thể được mã hóa Base64 và đặt vào một URL dạng data:image/png;base64,..., nhờ đó ảnh được nhúng trực tiếp vào HTML, CSS hoặc JSON mà không cần một request mạng riêng.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu