Bộ mã hóa tệp Base64

Mã hóa bất kỳ tệp nào sang Base64: PDF, ZIP, ảnh và hơn thế

Thả bất kỳ tệp nào vào đây hoặc nhấp để tải lên

Mọi loại tệp: PDF, ZIP, ảnh, tệp nhị phân

Mã hóa tệp Base64 là gì?

Mã hóa tệp Base64 chuyển đổi các tệp nhị phân — PDF, ZIP, ảnh, tệp thực thi, phông chữ, âm thanh — thành văn bản ASCII thuần túy sử dụng bảng chữ cái được định nghĩa trong RFC 4648. Mỗi ba byte đầu vào nhị phân trở thành bốn ký tự Base64, tạo ra một biểu diễn văn bản có thể truyền qua các kênh được thiết kế riêng cho văn bản: JSON API payload, tài liệu XML, nội dung email, thuộc tính HTML và biến môi trường.

Khác với mã hóa văn bản sang Base64 (hoạt động trên chuỗi ký tự), mã hóa tệp sang Base64 đọc luồng byte thô của bất kỳ tệp nào bất kể định dạng. Header nhị phân của PDF, các khối nén của ZIP và dữ liệu pixel của PNG đều được xử lý giống nhau: như một chuỗi octet cần tái mã hóa. Kết quả luôn là ASCII hợp lệ, an toàn để nhúng ở bất kỳ nơi nào chấp nhận ký tự có thể in được.

Sự đánh đổi là kích thước: đầu ra Base64 lớn hơn khoảng 33% so với nhị phân gốc. Với tệp PDF 1 MB, điều đó có nghĩa là khoảng 1,33 MB văn bản Base64. Chi phí này là cái giá phải trả khi biểu diễn các byte 8-bit bằng các ký tự 6-bit và là đặc tính cố hữu của mã hóa — không một triển khai nào có thể tránh khỏi. Dù vậy, mã hóa tệp Base64 vẫn là phương pháp chuẩn để nhúng dữ liệu nhị phân vào các định dạng chỉ chứa văn bản, được quy định trong MIME (RFC 2045), data URI (RFC 2397) và JSON Web Token (RFC 7519).

Tại sao dùng công cụ mã hóa tệp Base64 này?

Công cụ này mã hóa tệp sang Base64 trực tiếp trong trình duyệt của bạn sử dụng FileReader API. Không có tệp nào được tải lên máy chủ — toàn bộ quá trình chuyển đổi diễn ra phía máy khách bằng JavaScript.

🛡
Xử lý ưu tiên quyền riêng tư
Tệp của bạn không bao giờ rời khỏi thiết bị. FileReader API đọc tệp vào bộ nhớ cục bộ, và đầu ra Base64 được tạo ra hoàn toàn trong trình duyệt. Không có yêu cầu mạng nào được thực hiện.
Kéo và thả tức thì
Thả bất kỳ tệp nào vào công cụ và xem đầu ra Base64 ngay lập tức. Không cần chờ tải lên, không có thanh tiến trình, không có giới hạn kích thước tệp do máy chủ áp đặt.
📁
Mọi định dạng tệp
Mã hóa PDF, ZIP, ảnh, phông chữ, tệp âm thanh, module WebAssembly hay bất kỳ định dạng nhị phân nào khác. Bộ mã hóa xử lý tất cả các tệp như luồng byte thô — định dạng không quan trọng.
🔒
Không cần tài khoản
Sử dụng công cụ ngay lập tức mà không cần đăng ký, đăng nhập hay chấp nhận cookie. Kết quả sẵn sàng để sao chép hoặc tải xuống dưới dạng tệp .b64.txt chỉ với một cú nhấp.

Các trường hợp sử dụng mã hóa tệp Base64

Lập trình viên Frontend
Nhúng các biểu tượng, phông chữ hay SVG nhỏ trực tiếp vào CSS hoặc HTML dưới dạng data URI để loại bỏ các yêu cầu HTTP thêm. Một biểu tượng 2 KB được nhúng dưới dạng Base64 tiết kiệm một lần truyền mạng khứ hồi, giúp giảm 50-200 ms độ trễ.
Kỹ sư Backend
Đưa tệp đính kèm vào JSON API payload khi giao thức truyền tải không hỗ trợ tải lên multipart. Mã hóa PDF, báo cáo hay tài liệu có chữ ký trước khi gửi chúng dưới dạng trường chuỗi trong phản hồi REST hoặc GraphQL.
DevOps / Hạ tầng
Lưu trữ các tệp cấu hình nhị phân (chứng chỉ TLS, khóa SSH, tệp giấy phép) dưới dạng chuỗi Base64 trong biến môi trường, Kubernetes Secrets hay Terraform tfvars ở nơi không cho phép giá trị nhị phân thô.
Kỹ sư QA / Kiểm thử
Tạo fixture tệp Base64 cho các bài kiểm thử tự động xác minh endpoint tải lên, xử lý tệp đính kèm email hay pipeline xử lý tài liệu mà không cần quản lý các tệp kiểm thử nhị phân trong hệ thống kiểm soát phiên bản.
Kỹ sư dữ liệu
Tuần tự hóa các blob nhị phân (metadata Parquet, schema Protobuf, tài sản nhị phân nhỏ) sang Base64 để lưu trữ trong danh mục dữ liệu dựa trên JSON, kho cấu hình hay script di chuyển dữ liệu.
Sinh viên / Người học
Quan sát cách các tệp nhị phân trở thành văn bản bằng cách mã hóa các tệp nhỏ và kiểm tra đầu ra. So sánh độ dài Base64 với kích thước tệp gốc để xác minh chi phí 33% được mô tả trong RFC 4648.

Chi phí kích thước tệp Base64

Mã hóa Base64 tăng kích thước dữ liệu lên đúng một phần ba. Mỗi 3 byte đầu vào tạo ra 4 ký tự đầu ra (mỗi ký tự biểu diễn 6 bit). Ký tự đệm (=) được thêm vào khi độ dài đầu vào không phải bội số của 3. Bảng dưới đây cho thấy mối quan hệ giữa kích thước tệp gốc và kích thước đầu ra sau mã hóa.

Kích thước tệpByte thôByte Base64Chi phí
1 KB1,024 B1,368 B+33.3%
10 KB10,240 B13,656 B+33.4%
100 KB102,400 B136,536 B+33.3%
1 MB1,048,576 B1,398,104 B+33.3%
5 MB5,242,880 B6,990,508 B+33.3%
10 MB10,485,760 B13,981,016 B+33.3%

Tham chiếu Data URI và MIME Type

Data URI nhúng nội dung tệp trực tiếp vào HTML, CSS hay JavaScript theo định dạng data:[MIME type];base64,[encoded data]. MIME type cho trình duyệt biết cách diễn giải các byte đã giải mã. Dưới đây là các phần mở rộng tệp phổ biến, MIME type tương ứng và tiền tố data URI.

Phần mở rộngMIME TypeTiền tố Data URI
.pdfapplication/pdfdata:application/pdf;base64,...
.zipapplication/zipdata:application/zip;base64,...
.pngimage/pngdata:image/png;base64,...
.jpgimage/jpegdata:image/jpeg;base64,...
.gifimage/gifdata:image/gif;base64,...
.svgimage/svg+xmldata:image/svg+xml;base64,...
.woff2font/woff2data:font/woff2;base64,...
.mp3audio/mpegdata:audio/mpeg;base64,...
.wasmapplication/wasmdata:application/wasm;base64,...
.binapplication/octet-streamdata:application/octet-stream;base64,...

Ví dụ mã

Các ví dụ có thể chạy này cho thấy cách đọc tệp nhị phân và mã hóa sang Base64 trong JavaScript, Python, Node.js, bash và Go. Mỗi đoạn mã tạo ra Base64 chuẩn (RFC 4648 Phần 4) có đệm.

JavaScript (browser)
// Read a file from an <input> element and encode to Base64
const input = document.querySelector('input[type="file"]')
input.addEventListener('change', (e) => {
  const file = e.target.files[0]
  const reader = new FileReader()
  reader.onload = () => {
    const base64 = reader.result.split(',')[1]
    console.log(base64) // → "JVBERi0xLjQK..." (raw Base64, no data URI prefix)
  }
  reader.readAsDataURL(file)
})

// Convert a Blob to Base64 with async/await
async function blobToBase64(blob) {
  const buffer = await blob.arrayBuffer()
  const bytes = new Uint8Array(buffer)
  let binary = ''
  bytes.forEach(b => binary += String.fromCharCode(b))
  return btoa(binary) // → standard Base64 string
}
Python
import base64
from pathlib import Path

# Encode a file to Base64
file_bytes = Path('document.pdf').read_bytes()
encoded = base64.b64encode(file_bytes).decode('ascii')
print(encoded[:40])  # → "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PA..."

# Write encoded output to a text file
Path('document.b64.txt').write_text(encoded)

# Build a data URI from a file
mime_type = 'application/pdf'
data_uri = f'data:{mime_type};base64,{encoded}'
print(data_uri[:60])  # → "data:application/pdf;base64,JVBERi0xLj..."
Node.js
import { readFileSync, writeFileSync } from 'fs'

// Encode a file to Base64
const buffer = readFileSync('archive.zip')
const base64 = buffer.toString('base64')
console.log(base64.length) // → 1398104 (for a ~1 MB file)

// Save Base64 output to a file
writeFileSync('archive.b64.txt', base64)

// Build a data URI
const mime = 'application/zip'
const dataUri = `data:${mime};base64,${base64}`
CLI (bash)
# Encode a file to Base64 (macOS / Linux)
base64 < document.pdf > document.b64.txt

# Encode with no line wrapping (GNU coreutils)
base64 -w 0 < document.pdf > document.b64.txt

# Encode and copy to clipboard (macOS)
base64 < image.png | pbcopy

# Encode with OpenSSL (available everywhere)
openssl base64 -in archive.zip -out archive.b64.txt

# Pipe directly into curl for API upload
base64 -w 0 < photo.jpg | curl -X POST -d @- https://api.example.com/upload
Go
package main

import (
	"encoding/base64"
	"fmt"
	"os"
)

func main() {
	data, err := os.ReadFile("document.pdf")
	if err != nil {
		panic(err)
	}
	encoded := base64.StdEncoding.EncodeToString(data)
	fmt.Println(len(encoded)) // → 1398104 (for a ~1 MB file)

	// Write to file
	os.WriteFile("document.b64.txt", []byte(encoded), 0644)
}

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

Kích thước tệp tối đa có thể mã hóa sang Base64 là bao nhiêu?
Công cụ này chạy hoàn toàn trong trình duyệt của bạn, vì vậy giới hạn phụ thuộc vào bộ nhớ khả dụng. Các trình duyệt hiện đại xử lý tệp lên đến 50-100 MB mà không gặp vấn đề. Với các tệp lớn hơn, hãy dùng công cụ dòng lệnh như base64 (macOS/Linux) hoặc module base64 của Python, xử lý tệp theo từng khối và không tải toàn bộ đầu ra vào bộ nhớ cùng một lúc.
Đầu ra Base64 lớn hơn tệp gốc bao nhiêu?
Đầu ra Base64 luôn lớn hơn đầu vào khoảng 33,3%. Cụ thể, công thức là ceil(n / 3) * 4, trong đó n là số byte đầu vào. Tệp 1 MB tạo ra khoảng 1,33 MB văn bản Base64. Chi phí này là đặc tính cố hữu của mã hóa và không thể giảm được.
Tôi có thể mã hóa tệp sang Base64 và sử dụng làm data URI không?
Có. Thêm tiền tố MIME type vào chuỗi Base64: data:application/pdf;base64, theo sau là nội dung đã mã hóa. Trình duyệt sẽ giải mã và hiển thị data URI như thể đó là tệp thông thường. Data URI hoạt động trong thuộc tính img src, link href, CSS url(), và anchor download.
Mã hóa tệp Base64 có giống mã hóa bảo mật không?
Không. Base64 là mã hóa định dạng, không phải mã hóa bảo mật. Nó chuyển đổi dữ liệu nhị phân thành biểu diễn văn bản có thể đảo ngược dễ dàng — bất kỳ ai có bộ giải mã Base64 đều có thể khôi phục tệp gốc. Base64 không cung cấp tính bảo mật, toàn vẹn hay xác thực. Nếu bạn cần bảo vệ nội dung tệp, hãy mã hóa tệp trước (ví dụ bằng AES-256-GCM), sau đó Base64-encode văn bản mã hóa để truyền tải.
Tại sao chuỗi Base64 của tôi kết thúc bằng một hoặc hai ký tự =?
Các ký tự = là phần đệm. Base64 xử lý đầu vào theo nhóm 3 byte, tạo ra 4 ký tự đầu ra mỗi nhóm. Khi kích thước tệp không phải bội số của 3, một hoặc hai ký tự đệm được thêm vào để độ dài đầu ra luôn là bội số của 4. Một = nghĩa là nhóm cuối có 2 byte; hai == nghĩa là nhóm cuối có 1 byte.
Làm thế nào để mã hóa tệp sang Base64 từ dòng lệnh?
Trên macOS và Linux, dùng lệnh base64: base64 < file.pdf > file.b64.txt. Trên GNU/Linux, thêm -w 0 để tắt ngắt dòng. Bạn cũng có thể dùng OpenSSL: openssl base64 -in file.pdf -out file.b64.txt. Trên Windows PowerShell: [Convert]::ToBase64String([IO.File]::ReadAllBytes('file.pdf')).
Khi nào nên dùng mã hóa tệp Base64 thay vì multipart/form-data?
Dùng Base64 khi giao thức truyền tải yêu cầu định dạng chỉ chứa văn bản — JSON API, XML-RPC, biến môi trường hay Kubernetes Secrets. Dùng multipart/form-data khi tải tệp lên qua form HTML hoặc REST endpoint hỗ trợ luồng nhị phân. Multipart hiệu quả hơn vì tránh được chi phí kích thước 33%, nhưng yêu cầu máy chủ phân tích cú pháp ranh giới multipart.