🌐 VI

🔐 Bộ chuyển đổi Base64

Mã hóa văn bản và tệp sang Base64 hoặc giải mã chuỗi Base64. Hữu ích cho nhúng hình ảnh, giao tiếp API và truyền dữ liệu.

HƯỚNG DẪN

Tìm hiểu thêm

01

1. Mã hóa Base64 là gì?

Base64 là một lược đồ mã hóa chuyển đổi dữ liệu nhị phân thành chuỗi văn bản ASCII. Nó chỉ dùng 64 ký tự an toàn (A-Z, a-z, 0-9, +, /) để biểu diễn toàn bộ dữ liệu nhị phân. Thường dùng khi truyền dữ liệu nhị phân trong môi trường chỉ hỗ trợ văn bản như tệp đính kèm email, dữ liệu JSON và URL. Chuyển 3 byte dữ liệu thành 4 byte ký tự, làm kích thước tăng khoảng 33%. Dùng ký tự = để đệm, theo chuẩn RFC 4648.

02

2. Khi nào nên dùng Base64

Base64 được sử dụng trong nhiều tình huống. Trong phát triển web, có thể nhúng ảnh nhỏ trực tiếp vào HTML/CSS để giảm số lượng yêu cầu HTTP. Hệ thống email (MIME) chuyển tệp đính kèm thành văn bản để truyền. API JSON dùng nó để truyền an toàn dữ liệu nhị phân. Cũng được dùng khi lưu ảnh hoặc tệp trong cơ sở dữ liệu. Ngoài ra còn dùng để truyền dữ liệu phức tạp qua tham số URL, và trong token xác thực (JWT) nơi Base64 được áp dụng.

03

3. Base64 trong phát triển web

Base64 rất hữu ích trong phát triển web. Nhúng ảnh trực tiếp qua CSS Data URI giúp tăng tốc tải trang mà không cần yêu cầu HTTP riêng. Ví dụ: background-image: url(data:image/png;base64,iVBORw0KG...). Tuy nhiên, chỉ nên dùng cho ảnh nhỏ dưới 10KB; tệp lớn không thể cache và thực tế còn chậm hơn. Phù hợp với các ảnh nhỏ như favicon, logo và biểu tượng. Trong HTML5 Canvas, có thể tạo ảnh và chuyển sang Base64 bằng toDataURL() để tải xuống hoặc tải lên.

04

4. Mã hóa so với mã hóa bảo mật

Base64 là mã hóa, không phải mã hóa bảo mật. Mã hóa chuyển dữ liệu sang định dạng khác, và bất kỳ ai cũng có thể dễ dàng đảo ngược về dữ liệu gốc. Nó phục vụ cho tính tương thích và độ ổn định khi truyền tải, không phải để bảo mật. Ngược lại, mã hóa bảo mật bảo vệ dữ liệu để không thể giải mã nếu không có khóa. Dữ liệu đã mã hóa Base64 không có tính bảo mật, vì vậy tuyệt đối không nên chỉ Base64 hóa thông tin nhạy cảm (mật khẩu, dữ liệu cá nhân). Nếu cần bảo mật, hãy mã hóa trước (AES, RSA) rồi mới mã hóa Base64.

05

5. Tối ưu nhúng hình ảnh

Nhúng ảnh bằng Base64 có cả ưu và nhược điểm. Ưu điểm: giảm số yêu cầu HTTP giúp tải ban đầu nhanh hơn, và việc quản lý tệp đơn giản hơn. Nhược điểm: kích thước tăng 33%, trình duyệt không cache được, và CSS/HTML trở nên nặng hơn. Vì vậy, chỉ nên dùng cho logo, biểu tượng và ảnh nền nhỏ (5-10KB trở xuống). Với ảnh lớn, nên cung cấp dưới dạng tệp riêng và dùng CDN. Với ảnh được dùng lặp lại, nên để dưới dạng tệp để tận dụng cache.

06

6. Base64 trong API và truyền dữ liệu

Trong REST API, Base64 thường được dùng cho tải lên/tải xuống tệp. JSON là định dạng dựa trên văn bản nên không thể trực tiếp chứa dữ liệu nhị phân, nhưng chuyển sang Base64 cho phép truyền ảnh hoặc tài liệu bên trong JSON. Ví dụ: {"image": "data:image/png;base64,iVBORw..."}. Tuy nhiên, với tệp lớn, dùng multipart/form-data sẽ hiệu quả hơn. GraphQL và WebSocket cũng dùng Base64 cho truyền dữ liệu nhị phân. Payload của JWT cũng được mã hóa Base64, cho phép xác minh nội dung bằng cách giải mã.

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

Vì sao tôi gặp lỗi "Invalid Base64 string" khi giải mã?
Điều này xảy ra khi đầu vào chứa ký tự nằm ngoài bảng chữ cái Base64, hoặc phần đệm (=) bị thiếu hay bị hỏng. Hãy đảm bảo bạn đã sao chép chính xác đầu ra đã mã hóa ban đầu.
Mã hóa văn bản có cho kết quả khác với mã hóa tệp đã tải lên không?
Không, cả hai đều dùng cùng một quy trình nền. Văn bản trước tiên được chuyển sang byte UTF-8 rồi mới áp dụng Base64, còn byte nhị phân thô của tệp được chuyển thẳng sang Base64.
Văn bản có ký tự tiếng Hàn hoặc emoji có được mã hóa đúng không?
Có, vì quá trình xử lý dựa trên UTF-8, các ký tự đa byte như tiếng Hàn, tiếng Nhật và emoji đều mã hóa và giải mã đúng.
Chuyển sang Base64 có mã hóa bảo mật cho tệp của tôi không?
Không. Base64 là mã hóa, không phải mã hóa bảo mật, và ai cũng có thể đảo ngược ngay về dữ liệu gốc. Mật khẩu hoặc dữ liệu nhạy cảm không được bảo vệ chỉ bằng Base64.
Tôi có thể chuyển đổi tệp lớn bằng công cụ này không?
Công cụ xử lý trong bộ nhớ trình duyệt, nên về mặt kỹ thuật là có thể, nhưng tệp lớn sẽ tạo ra đầu ra lớn hơn khoảng 33% và có thể làm chậm trình duyệt - không khuyến nghị cho tệp rất lớn.