# Mã hóa và giải mã Base64

> Mã hóa và giải mã văn bản sang Base64 tức thì, hỗ trợ UTF-8 và định dạng URL-safe. Xử lý ngay trên trình duyệt, trực tuyến và hoàn toàn miễn phí.

URL: https://acrafto.com/vi/base64-ma-hoa-giai-ma-online/

Tools are interactive browser apps; there is no public API, no endpoints to call and no server-side processing. To use a tool, open its HTML page in a browser.

Bạn cần chuyển đổi văn bản dễ đọc sang định dạng Base64 để sử dụng trong tiêu đề HTTP, hoặc ngược lại, giải mã nội dung của API token? Công cụ **Mã hóa & Giải mã Văn bản Base64** của chúng tôi là một công cụ chuyên dụng để làm việc với các chuỗi văn bản, có thể xử lý cả những vấn đề phức tạp như dấu câu (diacritics) hoặc các ký tự đặc biệt.

> **Bạn đang làm việc với hình ảnh?**  
> Nếu mã của bạn bắt đầu bằng `data:image/png...` hoặc bạn muốn chuyển đổi tệp thành văn bản, công cụ này sẽ chỉ hiển thị các ký tự vô nghĩa. Vui lòng sử dụng công cụ chuyên dụng của chúng tôi để chuyển đổi sang hình ảnh.

## Định dạng Base64 hoạt động như thế nào?

Nhiều người sử dụng Base64 hàng ngày, nhưng ít ai biết cách nó hoạt động “bên dưới lớp vỏ”. Đó không phải là phép thuật, mà là toán học đơn giản với các bit.

Văn bản thông thường trong máy tính được lưu trữ theo 8 bit (1 byte). Tuy nhiên, Base64 sử dụng một “bảng chữ cái” gồm 64 ký tự (`A-Z`, `a-z`, `0-9`, `+`, `/`). Vì `2^6 = 64`, một ký tự Base64 đại diện chính xác **6 bit** thông tin.

**Quá trình chuyển đổi (Thuật toán):**

1. Lấy ba ký tự từ văn bản của bạn (3 × 8 bit = 24 bit).
2. 24 bit này được chia thành bốn nhóm, mỗi nhóm 6 bit.
3. Mỗi nhóm được gán một ký tự từ bảng Base64.

**Hệ quả:** Bởi vì chúng ta chuyển đổi từ 3 ký tự thành 4 ký tự, chuỗi Base64 kết quả luôn dài hơn khoảng **33%** so với văn bản gốc.

## Vấn đề bộ ký tự: Tại sao các công cụ chuyển đổi Base64 thông thường làm hỏng tiếng Séc (Czech)?

Nếu bạn đã từng thử mã hóa từ “Kůň” trong console trình duyệt bằng hàm `btoa('Kůň')`, bạn có thể đã gặp lỗi: *String contains characters outside of the Latin1 range.*

Base64 ban đầu được thiết kế cho các ký tự ASCII 7 bit. Tuy nhiên, tiếng Séc (Czech), biểu tượng cảm xúc và các ký hiệu đặc biệt khác (UTF-8) chiếm nhiều byte hơn trong bộ nhớ (multibyte characters).

- Chữ `a` = 1 byte.
- Chữ `ř` = 2 byte.
- Biểu tượng cảm xúc 🚀 = 4 byte.

Công cụ của chúng tôi giải quyết vấn đề này. Trước khi mã hóa sang Base64, chúng tôi chuyển đổi văn bản thành một chuỗi byte UTF-8 một cách chính xác. Nhờ đó, bạn có thể an toàn mã hóa các đối tượng JSON, văn bản tiếng Séc và các ký hiệu hiện đại mà không sợ mất mát dữ liệu.

## Mã hóa văn bản Base64 được sử dụng ở đâu?

Trong khi hình ảnh trong Base64 chủ yếu được sử dụng để nhúng vào CSS/HTML, Base64 văn bản có mục đích sử dụng hoàn toàn khác trong các hệ thống backend:

### 1\. HTTP Basic Authentication

Khi bạn đăng nhập vào một API, tiêu đề thường trông như thế này: `Authorization: Basic dMOqbl9uZ8aw4budaV9kw7luZzpt4bqtdF9raOG6qXU=` Đằng sau đoạn mã này chỉ đơn giản là tên người dùng và mật khẩu được kết hợp theo định dạng `tên_người_dùng:mật_khẩu`. Công cụ của chúng tôi cho phép bạn dễ dàng tạo hoặc kiểm tra các tiêu đề này.

### 2\. JSON Web Tokens (JWT)

Các ứng dụng web hiện đại sử dụng JWT để đăng nhập. Một token như vậy trông giống như ba chuỗi dài được phân tách bằng dấu chấm. Phần dữ liệu (Payload) là một đối tượng JSON thông thường được mã hóa bằng Base64.

- **Mẹo:** Thử dán phần giữa của JWT token của bạn vào đây và giải mã nó. Bạn sẽ thấy chính xác dữ liệu mà ứng dụng lưu trữ về bạn (ví dụ: ID người dùng, thời hạn hết hạn).

### 3\. Tệp cấu hình (Kubernetes Secrets)

Các nền tảng như Kubernetes lưu trữ dữ liệu bí mật (Secrets) trong các tệp cấu hình YAML bằng Base64. Đây không phải là mã hóa, mà là một cách để lưu trữ dữ liệu nhị phân hoặc văn bản có các ký tự gây vấn đề (dòng mới, dấu ngoặc kép) vào một tệp văn bản.

## ”Mã hóa Base64 an toàn cho URL” là gì và tại sao nó quan trọng?

Bảng chữ cái Base64 tiêu chuẩn chứa các ký tự `+` (dấu cộng) và `/` (dấu gạch chéo). Cả hai ký tự này đều có ý nghĩa đặc biệt trong địa chỉ URL:

- `/` dùng để phân tách thư mục.
- `+` thường được hiểu là dấu cách.

Nếu bạn gửi Base64 tiêu chuẩn trong một tham số URL (ví dụ: `site.com?token=ab/cd+ef`), máy chủ có thể đọc dữ liệu sai.

**Giải pháp (Chế độ URL Safe):** Công tắc của chúng tôi kích hoạt biến thể **Base64URL** (theo RFC 4648), thực hiện các thay đổi sau:

- `+` được thay đổi thành `-` (dấu gạch ngang).
- `/` được thay đổi thành `_` (dấu gạch dưới).
- Các ký tự `=` (padding) không cần thiết trong URL sẽ bị loại bỏ ở cuối.

---

## Lầm tưởng: Base64 không phải là mã hóa!

Điều quan trọng là phải nhận ra sự khác biệt cơ bản mà người mới bắt đầu thường nhầm lẫn:

1. **Mã hóa (Encoding - Base64):** Dùng để truyền dữ liệu. Nó giống như đóng gói một món đồ vào vali để không bị vỡ trên đường đi. Bất kỳ ai tìm thấy vali đều có thể mở nó (giải mã) và xem nội dung. **Nó không an toàn cho dữ liệu bí mật.**
2. **Mật mã hóa (Encryption - AES, RSA):** Khóa dữ liệu bằng một khóa. Không có khóa, bạn không thể truy cập nội dung.
3. **Hàm băm (Hashing - SHA, MD5):** Một quá trình một chiều (ví dụ: để lưu trữ mật khẩu). Không thể lấy lại văn bản gốc từ kết quả.

*Nếu bạn cần gửi mật khẩu hoặc thông tin nhạy cảm, chỉ Base64 thôi là không đủ. Bạn phải sử dụng HTTPS (SSL/TLS), cái sẽ mã hóa quá trình truyền dữ liệu.*

---

## Các câu hỏi thường gặp (FAQ)

### Các ký tự "=" ở cuối chuỗi có ý nghĩa gì?

Đó được gọi là "padding" (phần đệm). Bởi vì Base64 mã hóa dữ liệu theo nhóm 3 ký tự, có thể độ dài của văn bản gốc không chia hết cho ba. Các ký tự \`=\` được thêm vào cuối để bộ giải mã biết cần bỏ qua bao nhiêu bit ở cuối.

### Tại sao văn bản đã giải mã lại hiển thị như "cháo loạn xạ"?

Bạn có thể đang cố gắng giải mã dữ liệu không phải là văn bản. Nếu chuỗi Base64 đại diện cho một tệp nén (ZIP), hình ảnh hoặc dữ liệu được mã hóa, việc chuyển đổi sang văn bản (UTF-8) sẽ không có ý nghĩa. Hãy cố gắng tìm hiểu nguồn gốc của dữ liệu.

### Công cụ này có hoạt động ngoại tuyến không?

Có. Tất cả logic chuyển đổi được viết bằng JavaScript và chạy trực tiếp trong trình duyệt của bạn. Ngay sau khi trang được tải, bạn có thể ngắt kết nối internet và công cụ vẫn sẽ hoạt động. Dữ liệu của bạn không được gửi đi đâu cả.

## Other languages

- Čeština (cs): [Base64 Encoder a Decoder](https://acrafto.com/cs/base64-decoder-encoder/) ([Markdown](https://acrafto.com/cs/base64-decoder-encoder/index.md))
- Slovenčina (sk): [Base64 kódovač a dekódovač](https://acrafto.com/sk/base64-kodovac-dekodovac-online/) ([Markdown](https://acrafto.com/sk/base64-kodovac-dekodovac-online/index.md))
- English (en): [Base64 Encoder and Decoder](https://acrafto.com/en/base64-encoder-decoder/) ([Markdown](https://acrafto.com/en/base64-encoder-decoder/index.md))
- Deutsch (de): [Base64 Encoder und Decoder](https://acrafto.com/de/base64-encoder-decoder-online/) ([Markdown](https://acrafto.com/de/base64-encoder-decoder-online/index.md))
- Français (fr): [Encodeur et décodeur Base64](https://acrafto.com/fr/encodeur-decodeur-base64/) ([Markdown](https://acrafto.com/fr/encodeur-decodeur-base64/index.md))
- Español (es): [Codificador y decodificador Base64](https://acrafto.com/es/codificador-base64-decodificador-online/) ([Markdown](https://acrafto.com/es/codificador-base64-decodificador-online/index.md))
- Italiano (it): [Encoder e decoder Base64](https://acrafto.com/it/encoder-decoder-base64-online/) ([Markdown](https://acrafto.com/it/encoder-decoder-base64-online/index.md))
- Português (pt): [Codificador e decodificador Base64](https://acrafto.com/pt/encoder-decoder-base64-online/) ([Markdown](https://acrafto.com/pt/encoder-decoder-base64-online/index.md))
- Nederlands (nl): [Base64 encoder en decoder](https://acrafto.com/nl/base64-encoder-decoder/) ([Markdown](https://acrafto.com/nl/base64-encoder-decoder/index.md))
- Polski (pl): [Koder i dekoder Base64](https://acrafto.com/pl/koder-dekoder-base64-online/) ([Markdown](https://acrafto.com/pl/koder-dekoder-base64-online/index.md))
- Română (ro): [Base64 encoder și decoder](https://acrafto.com/ro/codor-decodor-base64/) ([Markdown](https://acrafto.com/ro/codor-decodor-base64/index.md))
- Magyar (hu): [Base64 kódoló és dekódoló](https://acrafto.com/hu/base64-kodolo-dekodolo-online/) ([Markdown](https://acrafto.com/hu/base64-kodolo-dekodolo-online/index.md))
- Ελληνικά (el): [Κωδικοποίηση και αποκωδικοποίηση Base64](https://acrafto.com/el/base64-encoder-decoder/) ([Markdown](https://acrafto.com/el/base64-encoder-decoder/index.md))
- Български (bg): [Base64 енкодер и декодер](https://acrafto.com/bg/base64-enkoder-dekoder-onlain/) ([Markdown](https://acrafto.com/bg/base64-enkoder-dekoder-onlain/index.md))
- Hrvatski (hr): [Base64 koder i dekoder](https://acrafto.com/hr/base64-koder-dekoder/) ([Markdown](https://acrafto.com/hr/base64-koder-dekoder/index.md))
- Slovenščina (sl): [Base64 kodirnik in dekodirnik](https://acrafto.com/sl/base64-kodirnik-dekodirnik/) ([Markdown](https://acrafto.com/sl/base64-kodirnik-dekodirnik/index.md))
- Eesti (et): [Base64 kodeerija ja dekodeerija](https://acrafto.com/et/base64-teisendaja/) ([Markdown](https://acrafto.com/et/base64-teisendaja/index.md))
- Latviešu (lv): [Base64 kodētājs un dekodētājs](https://acrafto.com/lv/base64-kodetajs-dekodetajs/) ([Markdown](https://acrafto.com/lv/base64-kodetajs-dekodetajs/index.md))
- Lietuvių (lt): [Base64 koduotuvas ir dekoduotuvas](https://acrafto.com/lt/base64-koduotuvas-dekoduotuvas/) ([Markdown](https://acrafto.com/lt/base64-koduotuvas-dekoduotuvas/index.md))
- Svenska (sv): [Base64 encode och decode](https://acrafto.com/sv/base64-kodare-avkodare-online/) ([Markdown](https://acrafto.com/sv/base64-kodare-avkodare-online/index.md))
- Dansk (da): [Base64 encoder og dekoder](https://acrafto.com/da/base64-encoder-dekoder-online/) ([Markdown](https://acrafto.com/da/base64-encoder-dekoder-online/index.md))
- Suomi (fi): [Base64-kooderi ja -dekooderi](https://acrafto.com/fi/base64-kooderi-dekooderi/) ([Markdown](https://acrafto.com/fi/base64-kooderi-dekooderi/index.md))
- Norsk (no): [Base64-enkoder og -dekoder](https://acrafto.com/no/base64-enkoder-dekoder/) ([Markdown](https://acrafto.com/no/base64-enkoder-dekoder/index.md))
- Українська (uk): [Base64 кодер і декодер](https://acrafto.com/uk/base64-koder-dekoder-onlajn/) ([Markdown](https://acrafto.com/uk/base64-koder-dekoder-onlajn/index.md))
- Русский (ru): [Base64 кодировщик и декодировщик](https://acrafto.com/ru/base64-koder-dekoder/) ([Markdown](https://acrafto.com/ru/base64-koder-dekoder/index.md))
- Српски (sr): [Base64 enkoder i dekoder](https://acrafto.com/sr/base64-enkoder-dekoder-online/) ([Markdown](https://acrafto.com/sr/base64-enkoder-dekoder-online/index.md))
- Македонски (mk): [Base64 енкодер и декодер](https://acrafto.com/mk/base64-converter/) ([Markdown](https://acrafto.com/mk/base64-converter/index.md))
- Bosanski (bs): [Base64 koder i dekoder](https://acrafto.com/bs/base64-koder-dekoder/) ([Markdown](https://acrafto.com/bs/base64-koder-dekoder/index.md))
- Shqip (sq): [Base64 kodues dhe dekodues](https://acrafto.com/sq/kodues-dekodues-base64-online/) ([Markdown](https://acrafto.com/sq/kodues-dekodues-base64-online/index.md))
- Türkçe (tr): [Base64 kodlayıcı ve çözücü](https://acrafto.com/tr/base64-kodlayici-cozucu-online/) ([Markdown](https://acrafto.com/tr/base64-kodlayici-cozucu-online/index.md))
- 日本語 (ja): [Base64エンコード・デコード](https://acrafto.com/ja/base64-encoder-decoder/) ([Markdown](https://acrafto.com/ja/base64-encoder-decoder/index.md))
- 한국어 (ko): [Base64 인코딩 디코딩](https://acrafto.com/ko/base64-encoder-decoder/) ([Markdown](https://acrafto.com/ko/base64-encoder-decoder/index.md))
- العربية (ar): [ترميز وفك ترميز Base64](https://acrafto.com/ar/base64-encoder-decoder/) ([Markdown](https://acrafto.com/ar/base64-encoder-decoder/index.md))
- हिन्दी (hi): [Base64 एन्कोडर और डिकोडर](https://acrafto.com/hi/base64-encoder-decoder-online/) ([Markdown](https://acrafto.com/hi/base64-encoder-decoder-online/index.md))
- Bahasa Indonesia (id): [Base64 encode dan decode](https://acrafto.com/id/konverter-base64-online/) ([Markdown](https://acrafto.com/id/konverter-base64-online/index.md))
- ไทย (th): [เข้ารหัสและถอดรหัส Base64](https://acrafto.com/th/base64-encoder-decoder/) ([Markdown](https://acrafto.com/th/base64-encoder-decoder/index.md))
- עברית (he): [קידוד ופענוח Base64](https://acrafto.com/he/base64-encoder-decoder/) ([Markdown](https://acrafto.com/he/base64-encoder-decoder/index.md))
