Cách sử dụng
- Thả tệp vào vùng tải lên, hoặc nhấp vào đó để chọn một tệp từ thiết bị của bạn (tối đa 100 MB).
- Chọn đầu ra: Base64 thuần cho API và tệp cấu hình, hoặc data URI cho HTML và CSS.
- Chỉ bật Ngắt dòng sau 76 ký tự khi nơi nhận cần các dòng theo kiểu MIME, chẳng hạn phần thân email.
- Kiểm tra tên tệp, kiểu MIME và dung lượng, rồi sao chép kết quả hoặc tải xuống dưới dạng tệp .txt.
Vì sao nên mã hóa tệp thành Base64?
Nhiều định dạng dùng để truyền dữ liệu giữa các hệ thống chỉ chứa được văn bản. JSON, XML, YAML, HTML và header email không thể chứa byte tùy ý, vì tệp có thể có byte 0, chuỗi ký tự không hợp lệ hoặc ký tự xuống dòng mà trình phân tích văn bản sẽ tự ý thay đổi. Base64 ánh xạ mỗi 3 byte của tệp thành 4 ký tự lấy từ tập 64 ký tự gồm chữ cái, chữ số, + và /, nhờ vậy mọi tệp đều có thể truyền đi dưới dạng chuỗi thông thường và được giải mã lại thành đúng các byte ban đầu.
Cái giá phải trả là dung lượng: văn bản sau mã hóa lớn hơn tệp gốc khoảng 33%, và các dấu xuống dòng còn làm tăng thêm một chút. Một tệp 3 MB sẽ trở thành khoảng 4 MB Base64.
Các ứng dụng phổ biến
- API JSON và XML. Các endpoint không nhận tải lên dạng multipart form thường yêu cầu gửi tệp dưới dạng chuỗi Base64 trong một trường, còn tên và loại tệp nằm ở các trường khác.
- Tệp đính kèm email. MIME mã hóa tệp đính kèm bằng Base64, mỗi dòng tối đa 76 ký tự (RFC 2045). Tùy chọn Ngắt dòng sau 76 ký tự tạo ra đúng bố cục này.
- Cấu hình và thông tin bí mật. Các giá trị trong
datacủa một Kubernetes Secret đều ở dạng Base64, nên chứng chỉ TLS, keystore hoặc tệp giấy phép phải được mã hóa trước khi đưa vào manifest. Các hệ thống CI cũng thường lưu thông tin bí mật dạng nhị phân trong biến môi trường theo cách tương tự. - Cơ sở dữ liệu và mã nguồn. Một tệp nhị phân nhỏ như phông chữ, âm thanh hoặc dữ liệu kiểm thử có thể được lưu trong cột văn bản hoặc hằng chuỗi thay vì một tệp riêng.
Với hình ảnh, công cụ Ảnh sang Base64 có thêm tính năng thay đổi kích thước và tạo sẵn đoạn mã HTML, CSS. Để chuyển Base64 trở lại thành tệp, hãy dùng Base64 sang tệp.
Base64 thuần hay data URI?
Base64 thuần chỉ gồm các byte đã mã hóa. Đây là dạng mà API, Kubernetes, cơ sở dữ liệu và hầu hết thư viện lập trình yêu cầu, thường đi kèm một trường riêng cho tên tệp hoặc kiểu nội dung.
Data URI thêm một tiền tố chứa kiểu MIME, ví dụ data:application/pdf;base64,, để trình duyệt có thể dùng cả chuỗi làm URL trong src, href hoặc url() của CSS. Đừng gửi tiền tố này đến API yêu cầu Base64 thuần, vì nhiều bộ giải mã sẽ từ chối nó. Nếu muốn tự đặt kiểu MIME hoặc dùng mã hóa phần trăm, hãy thử công cụ Tạo Data URI.
Hãy tắt Ngắt dòng sau 76 ký tự khi dùng kết quả cho JSON, YAML và mã nguồn. Chuỗi JSON không được chứa ký tự xuống dòng thô, còn giá trị bị ngắt dòng trong YAML rất dễ hỏng.
Mã hóa tệp bằng dòng lệnh
# Linux (GNU coreutils): -w 0 tắt chế độ ngắt dòng 76 ký tự mặc định
base64 -w 0 report.docx > report.txt
# macOS
base64 -i report.docx -o report.txt
# Windows PowerShell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\files\report.docx"))
# Kubernetes tự mã hóa tệp cho bạn
kubectl create secret generic app-cert --from-file=tls.crt
Câu hỏi thường gặp
Có giới hạn dung lượng tệp không?
Bạn có thể mã hóa tệp tối đa 100 MB. Đầu ra lớn hơn khoảng một phần ba, nên tệp 100 MB sẽ tạo ra khoảng 133 MB văn bản. Hiển thị lượng văn bản lớn như vậy có thể khiến trang chạy chậm, vì thế với tệp lớn, hãy dùng Tải xuống thay vì sao chép từ ô đầu ra.
Tệp của tôi có bị tải lên máy chủ không?
Không. Tệp được đọc và mã hóa bằng JavaScript ngay trong trình duyệt của bạn, không có gì được gửi qua mạng, nên chứng chỉ, khóa và tài liệu riêng tư vẫn nằm trên thiết bị của bạn.
Base64 có nén hay mã hóa bảo mật tệp không?
Cả hai đều không. Base64 làm dữ liệu lớn hơn khoảng 33%, và ai cũng có thể giải mã nó. Nếu tệp cần được giữ bí mật, hãy mã hóa bảo mật trước khi mã hóa Base64; nếu dung lượng quan trọng, hãy nén tệp trước, ví dụ thành tệp ZIP hoặc gzip.
Vì sao đầu ra có các dấu xuống dòng?
Vì tùy chọn Ngắt dòng sau 76 ký tự đang bật. Cách ngắt dòng này khớp với định dạng MIME dùng trong email, nhưng hầu hết API, tài liệu JSON và manifest Kubernetes đều cần một dòng liền mạch, nên hãy tắt nó trong những trường hợp đó.