Base64 Là Gì?
Base64 là cách biểu diễn mọi loại dữ liệu, dù là văn bản, hình ảnh hay cả một tệp, chỉ bằng 64 ký tự an toàn: A–Z, a–z, 0–9, + và /, cùng dấu = làm phần đệm ở cuối (được định nghĩa trong RFC 4648). Base64 ra đời để dữ liệu nhị phân có thể đi qua các hệ thống vốn được xây dựng cho văn bản thuần, như email, JSON, HTML và HTTP header.
Cứ 3 byte đầu vào trở thành 4 ký tự Base64, nên dữ liệu đã mã hóa lớn hơn bản gốc khoảng 33%. Ví dụ, chuỗi Hi trở thành SGk=. Bạn sẽ gặp Base64 trong tệp đính kèm email, URI ảnh data: trong HTML và CSS, phản hồi API có chứa tệp, JSON Web Token và header xác thực HTTP Basic.

Cách Giải Mã Base64
Dán chuỗi vào ô Giải mã. Công cụ xử lý được cả ngắt dòng, dấu cách, tiền tố data:...;base64,, ký tự URL-safe (- và _) lẫn trường hợp thiếu phần đệm =.
Nếu dữ liệu là văn bản, văn bản UTF-8 đã giải mã sẽ hiện ra ngay, sẵn sàng để sao chép.
Nếu dữ liệu là một tệp, công cụ giải mã nhận diện định dạng qua các byte đầu tiên: ảnh được xem trước, còn PDF, ZIP và các tệp khác có thể tải xuống.
Advertisement
Cách Mã Hóa Văn Bản Hoặc Tệp Sang Base64
Gõ hoặc dán văn bản vào tab Mã hóa. Văn bản được mã hóa dưới dạng UTF-8, nên chữ có dấu, chữ viết châu Á và emoji đều được giữ nguyên khi giải mã ngược lại.
Đánh dấu URL-safe để dùng Base64URL (dùng trong URL và JWT), hoặc ngắt dòng ở 76 ký tự cho nội dung email MIME.
Trong tab Tệp sang Base64, thả vào bất kỳ tệp nào có dung lượng tối đa 10 MB. Sao chép chuỗi Base64 thô hoặc một data URI dựng sẵn như data:image/png;base64,... để nhúng vào HTML hoặc CSS.
Base64 Sang Ảnh và Base64 Sang PDF
Base64 thường được dùng để bọc một tệp: một ảnh nhúng trong trang web hoặc email, hay một tệp PDF do API trả về. Công cụ giải mã kiểm tra các byte đầu tiên, gọi là magic number (số nhận dạng), để biết đó là tệp gì: ảnh PNG, JPEG, GIF, WebP và SVG được xem trước trực tiếp, còn tệp PDF, ZIP, GZIP, MP3 và MP4 có nút tải xuống. Tệp PDF cũng có thể mở trong tab mới.
Theo chiều ngược lại, chức năng ảnh sang Base64 nằm ở tab Tệp sang Base64: thả ảnh vào và sao chép data URI.
Advertisement
Các Biến Thể Base64: Chuẩn, URL-Safe, MIME và Data URI
Dùng + và / với phần đệm =. Là dạng mặc định trong hầu hết thư viện và API.
Thay + và / bằng - và _, thường bỏ phần đệm, để kết quả có thể nằm trong URL hoặc tên tệp. JSON Web Token dùng dạng này.
Base64 chuẩn được chia thành các dòng dài 76 ký tự, dùng cho tệp đính kèm email.
Base64 kèm tiền tố cho biết loại tệp, như data:image/png;base64,, để trình duyệt có thể hiển thị trực tiếp trong trang.
Base64 Là Encoding, Không Phải Mã Hóa Bảo Mật
Base64 giúp dữ liệu truyền tải an toàn qua các hệ thống, chứ không làm dữ liệu trở nên bí mật. Bất kỳ ai cũng có thể giải mã nó trong một giây, kể cả bằng chính công cụ này:
Đừng bao giờ dùng Base64 để giấu mật khẩu hay khóa. Header xác thực HTTP Basic chỉ là
user:passwordở dạng Base64, vì vậy nó chỉ được phép truyền qua HTTPS. Kiểm tra chứng chỉ của một trang web bằng công cụ kiểm tra SSL.Payload của JWT có thể đọc được. Phần giữa của JSON Web Token là JSON được mã hóa Base64URL, nên bất kỳ ai giữ token đều đọc được các claim của nó.
Giải mã ở đây là riêng tư. Công cụ này chạy hoàn toàn trong trình duyệt của bạn; dữ liệu bạn dán hoặc tải lên không bao giờ đến máy chủ của chúng tôi.
Cần bảo mật thật sự? Hãy dùng mã hóa bảo mật đúng nghĩa (encryption), và tạo các chuỗi bí mật mạnh bằng công cụ tạo mật khẩu.
Advertisement
Base64 Trong JavaScript, Python và Dòng Lệnh
Mọi ngôn ngữ lập trình đều có sẵn Base64. Hãy nhớ mã hóa văn bản sang UTF-8 trước, nếu không các ký tự ngoài bảng chữ tiếng Anh, như chữ có dấu, sẽ bị lỗi.
// Encode UTF-8 text
const b64 = btoa(String.fromCharCode(...new TextEncoder().encode('héllo'))) // 'aMOpbGxv'
// Decode back to text
const text = new TextDecoder().decode(Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)))import base64
b64 = base64.b64encode('héllo'.encode()).decode() # 'aMOpbGxv'
text = base64.b64decode(b64).decode() # 'héllo'
url_safe = base64.urlsafe_b64encode(b'\xfb\xff\xbf') # b'-_-_'echo -n 'hello' | base64 # aGVsbG8=
echo 'aGVsbG8=' | base64 --decode # hello
base64 -w 0 image.png > image.txt # Linux: one line, no wrapping[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('hello')) # aGVsbG8=
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('aGVsbG8=')) # helloThêm Công Cụ Mã Hóa và Xử Lý Văn Bản
Các công cụ chuyển đổi khác để làm việc với văn bản và dữ liệu: