Chiều

Nhập nội dung để xem kết quả.

Mọi phép mã hoá chạy trên trình duyệt của bạn. Nội dung bạn dán vào không được gửi đi đâu.

Cách tính

Base64 không phải là mã hoá bảo mật. Nó là cách biểu diễn dữ liệu nhị phân bằng 64 ký tự an toàn khi truyền qua những kênh chỉ chấp nhận văn bản — email, JSON, URL. Bất kỳ ai cũng giải mã ngược được trong một giây, nên đừng dùng nó để giấu thứ gì.

Cách hoạt động: gom từng 3 byte đầu vào thành 24 bit, cắt thành 4 nhóm 6 bit, rồi tra bảng 64 ký tự để lấy 4 ký tự đầu ra. Vì thế đầu ra luôn dài hơn đầu vào khoảng một phần ba. Khi số byte không chia hết cho 3, phần thiếu được bù bằng dấu "=" ở cuối — đó là lý do bạn hay thấy một hoặc hai dấu bằng ở đuôi chuỗi.

Chi tiết quan trọng nhất với tiếng Việt: hàm btoa có sẵn của trình duyệt chỉ nhận Latin-1 và ném lỗi ngay khi gặp ký tự có mã trên U+00FF — nghĩa là ném lỗi ở chữ có dấu đầu tiên. Trang này mã hoá văn bản sang byte UTF-8 bằng TextEncoder trước, nên "Xin chào" đi và về nguyên vẹn.

Base64URL là biến thể dùng trong URL và trong JWT: hai ký tự "+" và "/" đổi thành "-" và "_", và phần đệm "=" bị bỏ đi. Đưa một chuỗi Base64URL vào bộ giải mã Base64 thường sẽ lỗi ngay ở ký tự "-" đầu tiên, nên đây là hai chế độ riêng chứ không phải một.

Công thức

độ dài Base64 = ⌈số byte ÷ 3⌉ × 4

Luôn là bội số của 4 và dài hơn đầu vào khoảng 33%. Một chuỗi Base64 hợp lệ không bao giờ có độ dài chia 4 dư khác 0 — đó là phép kiểm tra rẻ nhất để loại chuỗi hỏng.

Ví dụ

Mã hoá chữ "Chào" (tiếng Việt có dấu):

Văn bản
Chào
Byte UTF-8
43 68 C3 A0 6F — 5 byte, không phải 4
Base64
Q2jDoG8=
Dùng btoa trực tiếp
InvalidCharacterError

Chữ "à" chiếm 2 byte trong UTF-8, và đó chính là byte làm btoa ném lỗi. Chuyển sang byte trước khi mã hoá là bước bắt buộc, không phải tuỳ chọn.

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

Base64 có phải là mã hoá bảo mật không?

Không. Nó chỉ là cách biểu diễn, ai cũng giải ngược được mà không cần khoá. Đừng bao giờ dùng Base64 để bảo vệ mật khẩu, khoá API hay dữ liệu cá nhân.

Vì sao chuỗi Base64 có dấu = ở cuối?

Đó là phần đệm. Base64 xử lý theo nhóm 3 byte; khi nhóm cuối chỉ có 1 hoặc 2 byte, phần thiếu được đánh dấu bằng hai hoặc một dấu bằng để bộ giải mã biết cần bỏ bao nhiêu bit.

Base64 và Base64URL khác nhau ở đâu?

Base64URL đổi "+" thành "-", "/" thành "_" và bỏ dấu "=", để chuỗi đặt thẳng vào URL mà không phải mã hoá phần trăm. Đây là dạng dùng trong JWT và phần lớn token trên đường dẫn.

URL encode khác Base64 thế nào?

URL encode chỉ thay những ký tự không an toàn trong URL bằng dạng %XX và giữ nguyên phần còn lại, nên kết quả vẫn đọc được. Base64 biến đổi toàn bộ dữ liệu và cho ra chuỗi không đọc được. Dùng URL encode cho tham số truy vấn, Base64 cho dữ liệu nhị phân.

Vì sao giải mã báo "không phải văn bản UTF-8"?

Vì chuỗi giải ra byte hợp lệ nhưng dãy byte đó không phải văn bản UTF-8 — thường là bạn đang giải một tệp ảnh, một khoá nhị phân, hoặc một chuỗi bị cắt mất một phần. Trang này báo lỗi thay vì trả về một chuỗi đầy ký tự thay thế trông như giải mã thành công.

Nội dung tôi dán vào có được gửi đi đâu không?

Không. Mọi phép mã hoá và giải mã chạy trên trình duyệt của bạn. Trang này là tệp HTML tĩnh, không có máy chủ nào nhận dữ liệu.

Nguồn tham khảo

Báo lỗi cho quản trị viênThấy kết quả sai, số liệu đã lỗi thời hay lỗi hiển thị? Gửi báo cáo ngay tại đây. Đường dẫn trang và tên công cụ được đính kèm sẵn, bạn chỉ cần mô tả vấn đề.

Báo lỗi cho quản trị viên

Mô tả càng cụ thể càng nhanh sửa: bạn đã nhập gì, kết quả nhận được và kết quả bạn cho là đúng.

Vấn đề thuộc loại nào?
0/2000

Chỉ dùng để trả lời bạn, không dùng vào việc gì khác.

Gửi kèm báo cáo

Trang
/ma-hoa-base64
Công cụ
Mã hoá Base64 & URL
Ngôn ngữ
Tiếng Việt

Các giá trị bạn nhập trong công cụ không được gửi đi. Ngoài những thông tin dưới đây, máy chủ ghi lại loại trình duyệt và dùng địa chỉ IP để giới hạn tần suất gửi — chi tiết ở trang Chính sách bảo mật.