Giải mã Base64
Công cụ giải mã Base64 trực tuyến miễn phí giúp đưa chuỗi Base64 trở lại văn bản gốc. Hỗ trợ nhiều bộ ký tự và phù hợp cho việc kiểm tra API hoặc khôi phục log.
Đề xuất Liên quan
Giải mã Base64 là gì?
Giải mã Base64 là quá trình ngược lại với mã hóa Base64: chuyển một chuỗi Base64 (ví dụ SGVsbG8=) trở về văn bản gốc hoặc dữ liệu nhị phân. Base64 là phương pháp biểu diễn dữ liệu nhị phân bằng 64 ký tự ASCII có thể in được (A-Z, a-z, 0-9, +, /), được định nghĩa trong RFC 4648.
**Các tình huống sử dụng phổ biến:** Base64 được dùng rộng rãi trong header HTTP Basic Authentication, phần payload của token JWT, field trong phản hồi API, Data URI (ví dụ `data:image/png;base64,...`), MIME cho tệp đính kèm email và lưu trữ trường BLOB trong cơ sở dữ liệu. Việc giải mã các nội dung này là tác vụ quen thuộc trong phát triển và gỡ lỗi.
**Các bước quan trọng khi giải mã:** khi giải mã Base64 cần xử lý đúng: 1) bộ ký tự (UTF-8 cho ký tự nhiều byte, ASCII cho tiếng Anh thuần túy), 2) Padding (`=`) vì độ dài phải là bội số của 4, 3) biến thể URL-safe (`-` và `_` thay cho `+` và `/`), 4) xuống dòng và khoảng trắng (Base64 chuẩn không có, còn MIME sẽ xuống dòng mỗi 76 ký tự).
**Hỗ trợ gốc của trình duyệt:** trình duyệt cung cấp hàm `atob()` để giải mã Base64 nhưng chỉ hỗ trợ Latin-1 (ISO-8859-1). Để xử lý văn bản UTF-8, cần dùng `TextDecoder('utf-8')` để diễn giải chuỗi byte. Công cụ này tự động xử lý các bước đó.
**Xử lý cục bộ và quyền riêng tư:** mọi thao tác giải mã đều diễn ra trong trình duyệt. Chuỗi Base64 bạn nhập không được gửi lên bất kỳ máy chủ nào, nên bạn có thể yên tâm giải mã token nhạy cảm trong API hoặc dữ liệu người dùng trong log.
Trường hợp sử dụng
- Giải mã field Base64 từ phản hồi API để xem nội dung gốc
- Khôi phục dữ liệu Base64 trong log
- Lấy lại giá trị Base64 trong tệp cấu hình
- Phân tích lỗi giải mã Base64 như thiếu padding hoặc có ký tự không hợp lệ
- Giải mã header và payload của JWT để xem thông tin người dùng
- Giải mã thông tin xác thực HTTP Basic Authentication để xem tên người dùng và mật khẩu
- Khôi phục dữ liệu hình ảnh hoặc tài nguyên từ Data URI Scheme
Cách Sử dụng
- Dán chuỗi Base64 cần giải mã
- Chọn bộ ký tự (UTF-8/ASCII/ISO-8859-1)
- Công cụ sẽ tự động giải mã Base64 và hiển thị kết quả
- Sao chép kết quả để tiếp tục gỡ lỗi hoặc lưu vào tài liệu
Tính năng
- Chuyển đổi theo thời gian thực: nhập vào là tự động giải mã với độ trễ 300 ms, không cần thao tác thủ công
- Hỗ trợ nhiều bộ ký tự: UTF-8, ASCII và ISO-8859-1 cho tiếng Việt, tiếng Anh và tình huống đa ngôn ngữ
- Tương thích URL-safe Base64: tự động xử lý `-` và `_`, kể cả định dạng không có padding
- Phát hiện ký tự không hợp lệ: khi giải mã thất bại, công cụ hiển thị vị trí lỗi cụ thể
- Sao chép và tải xuống bằng một cú nhấp: sao chép kết quả vào clipboard hoặc tải về dưới dạng `.txt`
- Tự động xử lý Padding: thêm hoặc bỏ ký tự `=` mà không cần bạn chỉnh tay
- Hỗ trợ biến thể MIME: nhận biết và xử lý Base64 MIME có xuống dòng mỗi 76 ký tự
Ví dụ mã
JavaScript: giải mã bằng `atob()` của trình duyệt (chỉ Latin-1)
javascriptDùng API gốc của trình duyệt để giải mã Base64 đơn giản. Với UTF-8, bạn cần `TextDecoder`.
// Standard Base64 decode (plain English / Latin-1)
function b64Decode(str) {
try {
return atob(str);
} catch (e) {
return 'Decode failed: ' + e.message;
}
}
console.log(b64Decode('SGVsbG8gV29ybGQ=')); // "Hello World"
// UTF-8 decode (recommended)
function b64DecodeUtf8(str) {
const binary = atob(str);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return new TextDecoder('utf-8').decode(bytes);
}
console.log(b64DecodeUtf8('5LiW55WM')); // UTF-8 textPython: giải mã bằng thư viện `base64` (gồm cả URL-Safe)
pythonThư viện chuẩn `base64` của Python hỗ trợ cả chế độ Standard và URL-Safe.
import base64
# Standard decode
encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded)
# URL-Safe decode
url_encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.urlsafe_b64decode(url_encoded + '=' * (4 - len(url_encoded) % 4))
print(decoded.decode('utf-8'))
# MIME decode (after removing line breaks)
mime_encoded = 'SGVs\nbG8g\nV29y\nbGQ='
decoded = base64.b64decode(mime_encoded.replace('\n', '')).decode('utf-8')
print(decoded)
# Ignore invalid characters automatically
import re
cleaned = re.sub(r'[^A-Za-z0-9+/=]', '', encoded)
decoded = base64.b64decode(cleaned).decode('utf-8')
print(decoded)Java: giải mã bằng `java.util.Base64` (nhiều biến thể)
javaThư viện chuẩn của Java hỗ trợ đầy đủ Base64 RFC 4648, URL-Safe và MIME.
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64DecodeExample {
public static void main(String[] args) {
String encoded = "SGVsbG8g5LiW55WM";
// Standard decode
byte[] decoded = Base64.getDecoder().decode(encoded);
System.out.println(new String(decoded, StandardCharsets.UTF_8));
// URL-Safe decode
byte[] urlDecoded = Base64.getUrlDecoder().decode(encoded);
System.out.println(new String(urlDecoded, StandardCharsets.UTF_8));
// MIME decode (handles line breaks automatically)
String mime = "SGVs\nbG8g\nV29y\nbGQ=";
byte[] mimeDecoded = Base64.getMimeDecoder().decode(mime);
System.out.println(new String(mimeDecoded, StandardCharsets.UTF_8));
// Error handling
try {
Base64.getDecoder().decode("invalid@base64");
} catch (IllegalArgumentException e) {
System.err.println("Decode failed: " + e.getMessage());
}
}
}Câu hỏi Thường gặp
Tại sao giải mã Base64 lại báo InvalidCharacterError?
Nguyên nhân phổ biến là chuỗi đầu vào có khoảng trắng, xuống dòng, dấu ngoặc kép, số lượng Padding (`=`) không đúng hoặc đang dùng biến thể URL-safe (`-/_`) nhưng lại giải theo Base64 chuẩn. Hãy làm sạch chuỗi trước khi giải mã.
Nếu giải mã xong mà thấy ký tự bị lỗi thì sao?
Có thể bạn đã chọn sai bộ ký tự. Nếu văn bản gốc là ký tự nhiều byte, hãy chọn UTF-8. Nếu là tiếng Anh thuần túy hoặc dữ liệu nhị phân, bạn có thể thử ASCII hoặc ISO-8859-1.
Giải mã URL-safe Base64 khác gì Base64 thường?
URL-safe Base64 dùng `-` và `_` thay cho `+` và `/`, đồng thời thường bỏ phần Padding `=` ở cuối. Trước khi giải mã, cần đổi `-/_` về `+/` và bổ sung padding nếu cần.
Giải mã Base64 có phù hợp để debug tích hợp API không?
Rất phù hợp. Nhiều phản hồi API, OAuth token, callback parameter và middleware log đóng gói dữ liệu bằng Base64. Sau khi giải mã, bạn có thể xem trực tiếp nội dung gốc.
Làm sao để giải mã header hoặc payload của JWT?
JWT dùng Base64URL (biến thể URL-safe). Hãy dán segment đầu tiên (header) hoặc thứ hai (payload) của JWT rồi chọn chế độ URL-safe. Segment thứ ba là chữ ký và không nên xác minh chỉ bằng cách giải mã thông thường.
Công cụ có hỗ trợ tệp lớn không?
Không có giới hạn kích thước cứng, nhưng trình duyệt có thể chậm đi với chuỗi rất lớn. Giải mã Base64 lớn hơn 10 MB có thể làm trang lag, vì vậy nên chia nhỏ hoặc dùng script Node.js / Python.
Nếu thiếu padding thì sao?
Công cụ sẽ tự động thêm Padding (`=`) để đưa độ dài về bội số của 4. Vì biến thể URL-safe thường bỏ phần padding nên công cụ sẽ tự nhận biết và bổ sung.
Giải mã Base64 có phải là giải mã hóa không?
Không. Base64 là mã hóa có thể đảo ngược chứ không phải mã hóa bảo mật. Bất kỳ ai cũng có thể giải mã Base64. Với dữ liệu nhạy cảm, bạn nên dùng cơ chế mã hóa thực sự như AES.
Kết quả từ `atob()` của trình duyệt có giống công cụ này không?
Với văn bản tiếng Anh đơn giản thì thường giống nhau. Tuy nhiên `atob()` chỉ hỗ trợ Latin-1 và không xử lý trực tiếp văn bản UTF-8 nhiều byte. Công cụ này tương đương với việc kết hợp `atob()` và `TextDecoder`.
Có thể xuất kết quả giải mã không?
Có. Bạn có thể sao chép vào clipboard chỉ với một cú nhấp hoặc tải về dưới dạng tệp `.txt`. Tệp tải xuống dùng mã hóa UTF-8 và mở được bằng trình soạn thảo văn bản hoặc Excel.
Thuật ngữ
- Base64
- Phương pháp mã hóa nhị phân sang văn bản dựa trên 64 ký tự ASCII có thể in được, được định nghĩa trong RFC 4648. Mỗi 3 byte được chuyển thành 4 ký tự nên kích thước tăng khoảng 33%.
- atob()
- Hàm giải mã Base64 có sẵn trong trình duyệt (ASCII to Binary). Hàm này chỉ hỗ trợ Latin-1, vì vậy cần kết hợp với TextDecoder khi xử lý UTF-8.
- Padding
- Các ký tự `=` được thêm vào cuối Base64 để đưa độ dài về bội số của 4. Khi giải mã, padding thường được xử lý tự động. Biến thể URL-safe thường bỏ qua phần này.
- URL-Safe Base64
- Biến thể an toàn cho URL được định nghĩa trong RFC 4648 §5, dùng `-` và `_` thay cho `+` và `/`. Thường xuất hiện trong JWT và OAuth PKCE.
- MIME Base64
- Biến thể Base64 theo RFC 2045, chèn CRLF sau mỗi 76 ký tự. Chủ yếu được dùng để truyền tệp đính kèm email.
- UTF-8
- Chuẩn mã hóa Unicode có độ dài biến thiên. Để khôi phục đúng ký tự nhiều byte, bạn cần chọn UTF-8 khi giải mã Base64.
- InvalidCharacterError
- Lỗi mà `atob()` ném ra khi đầu vào chứa khoảng trắng, xuống dòng hoặc ký tự không hợp lệ đối với Base64.
- Latin-1 (ISO-8859-1)
- Bộ ký tự 1 byte cho các ngôn ngữ Tây Âu. `atob` và `btoa` trong trình duyệt chỉ hỗ trợ trực tiếp bộ ký tự này.
So sánh 3 biến thể Base64
Trước khi giải mã, hãy xác định biến thể Base64 của đầu vào và chọn đúng chế độ để tránh lỗi hoặc kết quả bị hỏng.
| Đặc điểm | Standard | URL-Safe | MIME |
|---|---|---|---|
| Ký tự đặc biệt | + / | - _ | + / |
| Padding (=) | Có dùng | Thường bỏ qua | Có dùng |
| Xuống dòng | Không | Không | Mỗi 76 ký tự |
| Chuẩn | RFC 4648 §4 | RFC 4648 §5 | RFC 2045 |
| Tình huống điển hình | Data URI, mã hóa chung | JWT, tham số URL, tên tệp | Tệp đính kèm email, truyền SMTP |
| Lưu ý khi giải mã | Có thể cần bổ sung padding | Đổi -_ thành +/ trước rồi mới giải mã | Xóa xuống dòng trước khi giải mã |
5 lỗi thường gặp khi giải mã Base64
Nếu gặp lỗi khi giải mã, bảng sau sẽ giúp bạn tìm nguyên nhân nhanh hơn.
| Loại lỗi | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| InvalidCharacterError | Có khoảng trắng, xuống dòng hoặc ký tự không thuộc Base64 | Làm sạch chuỗi đầu vào hoặc dùng công cụ Base64 Clean |
| Văn bản bị lỗi sau khi giải mã | Chọn sai bộ ký tự, ví dụ đọc UTF-8 bằng Latin-1 | Chuyển sang UTF-8 |
| Lỗi trong tham số URL | Ký tự URL-safe (`-_`) bị giải như Base64 chuẩn | Trước tiên đổi `-_` thành `+/` |
| Padding sai | Độ dài không phải bội số của 4 | Thêm `=` cho đến khi độ dài % 4 = 0 |
| Chuỗi rỗng | Đầu vào chỉ có khoảng trắng hoặc xuống dòng | Xóa khoảng trắng rồi nhập lại |
Authoritative References
- So sánh chuỗi bảo mật
- Chuyển Đổi Nhị Phân
- Mật Mã Caesar
- Mã Morse
- Chuyển Đổi Hex
- Video sang Base64
- Base64 Sang Video
- Ảnh sang Base64
- Base64 sang ảnh
- Văn bản sang Base64
- Base64 Sang Văn Bản
- Trình kiểm tra hash tệp
- Tệp Sang Base64
- Base64 Sang Tệp
- Chuyển đổi Âm thanh sang Base64
- Base64 sang Âm thanh
- Mã hóa và giải mã AES
- Mã Hóa Giải Mã DES
- Bộ Mã Hóa Giải Mã Base32
- Base58 mã hóa và giải mã
- Mã hóa Base64
- Giải mã Base64
- So sánh Base64
- Chia Base64
- Base64 gộp nhiều dòng
- Định dạng Base64
- Kiểm Tra Định Dạng Base64
- Mã hóa Base64 hàng loạt
- Giải mã Base64 Hàng loạt
- Dọn dẹp Base64
- Xử lý padding Base64
- Thống Kê Độ Dài Base64
- Base64 Sang Hex
- Chuyển đổi Base64 DataURL
- Công cụ chuyển đổi Base64-Hex
- Bộ Mã Hóa Base85
- Tạo & Xác minh HMAC
- PBKDF2 Phái sinh khóa
- Băm MD5
- Hash SHA-256
- Băm SHA1
- Băm SHA512
- Công cụ JWT
- Mã hóa và giải mã HTML
- Escape Unicode
- Mã hóa URL
- URL Safe Base64
- MIME Base64
- Làm rối Java
- Làm rối JS
- Làm rối PHP
- Làm rối Python