base64_encoder.ts

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

Dán văn bản → Mã hóa hoặc Giải mã → Sao chép kết quả. Miễn phí, tức thì, bảo mật.

Tức thìMiễn phíBảo mậtKhông cần đăng ký
base64 — encoder & decoder
ĐẦU VÀO
0 ký tự
KẾT QUẢ
0 ký tự
Bảng tham chiếu nhanh

Các chuỗi phổ biến và giá trị Base64 tương ứng

Hello WorldSGVsbG8gV29ybGQ=
ZestLabWmVzdExhYg==
developerZGV2ZWxvcGVy
{"key":"value"}eyJrZXkiOiJ2YWx1ZSJ9
user:passworddXNlcjpwYXNzd29yZA==
https://zestlab.ioaHR0cHM6Ly96ZXN0bGFiLmlv
Đoạn code mẫu

Cách mã hóa/giải mã Base64 trong các ngôn ngữ phổ biến

// Encode to Base64 (UTF-8 safe) function encodeBase64(str) { return btoa( encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16))) ); } encodeBase64("Hello, 世界!"); // "SGVsbG8sIOS4lueVjCE="
Mẫu phổ biến

Nhấp để tải ví dụ vào ô nhập

Base64 là gì?

Base64 là một phương pháp mã hóa nhị phân sang văn bản, chuyển đổi dữ liệu nhị phân thành chuỗi ký tự ASCII bằng cách sử dụng bộ ký tự gồm 64 ký tự in được: A–Z, a–z, 0–9, +/. Ký tự = được sử dụng để đệm phần cuối khi cần.

Base64 được định nghĩa trong RFC 4648 và được sử dụng rộng rãi trong email (MIME), chứng chỉ SSL/TLS, xác thực HTTP Basic, nhúng ảnh trong CSS/HTML, và lưu trữ dữ liệu nhị phân trong các trường văn bản. Điều quan trọng cần nhớ: Base64 không phải mã hóa bảo mật — nó chỉ là mã hóa định dạng, bất kỳ ai cũng có thể giải mã.

Base64 hoạt động như thế nào?

Thuật toán Base64 xử lý dữ liệu đầu vào theo từng nhóm 3 byte (24 bit). Mỗi nhóm 3 byte được chia thành 4 giá trị 6-bit, và mỗi giá trị 6-bit được ánh xạ thành một ký tự trong bảng Base64. Điều này có nghĩa là mỗi 3 byte đầu vào tạo ra 4 ký tự đầu ra — tỷ lệ tăng kích thước là khoảng 33%.

Ví dụ chi tiết: Chuỗi "Man" (3 byte):

  • M = 0x4D = 01001101
  • a = 0x61 = 01100001
  • n = 0x6E = 01101110
  • Ghép lại: 010011 010110 000101 101110
  • Ánh xạ: T, W, F, u → "TWFu"

Nếu dữ liệu không chia hết cho 3 byte, ký tự đệm = hoặc == được thêm vào cuối để bù đắp.

Hỗ trợ UTF-8 và Unicode

Hàm btoa() gốc của JavaScript chỉ xử lý ký tự Latin-1, không hỗ trợ ký tự Unicode như tiếng Việt, tiếng Trung hay emoji. Công cụ này sử dụng TextEncoder/TextDecoder để mã hóa chuỗi Unicode thành byte UTF-8 trước, sau đó mới áp dụng Base64:

// UTF-8 safe encode const bytes = new TextEncoder().encode(str); let binary = ""; for (const b of bytes) binary += String.fromCharCode(b); return btoa(binary);

So sánh Base64, URL Encoding và Hex

Phương phápTỷ lệ kích thướcTrường hợp dùngVí dụ
Base64+33%Email, API, dữ liệu nhị phânSGVsbG8=
URL Encoding+200% (ký tự đặc biệt)Tham số URL, query stringHello%20World
Hex+100%Debug, hash, màu sắc CSS48656c6c6f

Base64 an toàn cho URL (URL-safe Base64)

Base64 chuẩn sử dụng ký tự +/ — cả hai đều có ý nghĩa đặc biệt trong URL. Trong JWT (JSON Web Token) và nhiều API hiện đại, người ta dùng Base64url: thay + bằng -/ bằng _, đồng thời bỏ ký tự đệm =.

Để chuyển từ Base64 chuẩn sang Base64url: str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

Lỗi thường gặp với Base64

  • Lỗi "Invalid character": Xảy ra khi chuỗi có ký tự không thuộc bảng Base64 (ví dụ khoảng trắng, xuống dòng). Hãy loại bỏ khoảng trắng trước khi giải mã.
  • Lỗi padding: Base64 phải có độ dài chia hết cho 4. Nếu thiếu, thêm ký tự = vào cuối.
  • Nhầm lẫn URL-safe: Nếu chuỗi chứa - hoặc _, đó là Base64url — cần chuyển ngược về chuẩn trước khi giải mã bằng atob().
  • Mã hóa ký tự: Luôn chỉ định rõ encoding là UTF-8 khi làm việc với ngôn ngữ không phải ASCII.

Ứng dụng thực tế của Base64

HTTP Basic Authentication: Header Authorization: Basic dXNlcjpwYXNz — giá trị sau "Basic" là Base64 của "user:pass". Lưu ý: đây không phải bảo mật thực sự nếu không có HTTPS.

Data URI: Nhúng ảnh trực tiếp vào HTML/CSS mà không cần file riêng: <img src="data:image/png;base64,iVBORw0...">. Hữu ích cho ảnh nhỏ, icon, hoặc email template.

JWT (JSON Web Token): Header và payload của JWT được mã hóa Base64url. Phần signature được ký bằng secret key. Bạn có thể decode header/payload mà không cần key, nhưng không thể giả mạo signature.

API và webhook: Khi gửi dữ liệu nhị phân (PDF, ảnh, file) qua JSON API, Base64 là cách phổ biến để serialize dữ liệu vào trường string.

Sử dụng Base64 trong code

Mỗi ngôn ngữ lập trình đều có thư viện tích hợp sẵn cho Base64. Trong JavaScript/TypeScript, sử dụng btoa()/atob() cho trình duyệt, hoặc Buffer.from(str, 'base64') trong Node.js. Python có module base64 với đầy đủ biến thể. Trong các ngôn ngữ như Go, Java, Rust đều có trong thư viện chuẩn.

Xem tab Code Snippets ở trên để lấy đoạn code mẫu sẵn dùng cho JavaScript, Python và cURL.

Giới thiệu về Developer Tools

Công cụ developer tự động hóa các phần lặp đi lặp lại của công việc phần mềm: format JSON, encode/decode Base64, decode JWT để xác minh claim của token, tạo UUID, format XML, diff cấu hình. Đây không phải tác vụ hào nhoáng, nhưng là các điểm nghẽn ngốn 10-15 phút nhiều lần mỗi ngày — cộng lại hàng giờ mỗi tuần. Chạy chúng trên tab trình duyệt sạch sẽ hơn vật lộn với phụ thuộc CLI hay extension IDE có thể gửi dữ liệu riêng tư của bạn cho bên thứ ba.

Vì sao nó quan trọng

Công cụ developer client-side nhanh về cơ bản quan trọng vì chúng được dùng với dữ liệu nhạy cảm. JWT token chứa danh tính người dùng. Payload Base64 có thể encode API key. JSON dump bao gồm bản ghi khách hàng. Nếu một 'công cụ developer' gửi input của bạn lên server để xử lý, bạn vừa rò rỉ production secret. Công cụ dev của ZestLab chạy 100% client-side không có network call nào sau khi load page — những gì bạn paste vẫn ở trong trình duyệt.

Riêng tư và an toàn

Tất cả công cụ developer ở đây chạy trong trình duyệt bằng JavaScript thuần. Không có 'decode server' hay 'format API' — JWT, JSON, payload encode của bạn được parse bởi code chạy trên laptop của bạn. Tự xác minh bằng DevTools trình duyệt → Network tab: bạn sẽ thấy không có request nào khi dùng bất kỳ công cụ nào. Đó là tiêu chuẩn chúng tôi giữ vì công cụ dev xử lý secret.

Thực hành tốt

  • Không bao giờ paste JWT hay API token production vào BẤT KỲ công cụ online nào mà không xác minh chạy client-side (check tab Network)
  • Dùng chế độ ẩn danh trình duyệt để decode một lần các payload nhạy cảm
  • Bookmark công cụ bạn dùng hàng ngày — URL công cụ ZestLab ổn định, không cần tài khoản
  • Khi format JSON có secret để team review, redact credential trước khi share output