Mã hóa / giải mã Base64

Dán văn bản để mã hóa hoặc giải mã ngay khi gõ, hoặc thả một file vào cho nó chạy theo dòng. Mọi thứ diễn ra trong trình duyệt, file của bạn không rời khỏi máy.

File không bao giờ rời khỏi thiết bị của bạn

Tùy chọn

Dùng - và _ thay cho + và / — đúng biến thể mà JWT, URL và JWK dùng.

Base64 biến byte bất kỳ thành 64 ký tự in được, để dữ liệu đi lọt qua những nơi chỉ nhận văn bản: thân email, một trường JSON, file cấu hình YAML, một URL. Trang này chuyển đổi cả hai chiều, cho chuỗi dán vào lẫn cho file, mà không gửi gì đi đâu.

Cái giá của phép chuyển đổi

Base64 không nén — nó làm ngược lại. Cứ ba byte đầu vào thành bốn ký tự đầu ra, nên kết quả bằng bốn phần ba thứ bỏ vào, cộng thêm padding. Ảnh 3 MB sẽ thành khoảng 4 MB văn bản. Đó là cái giá để nhét dữ liệu nhị phân vào chỗ chỉ cho phép văn bản, và nên biết trước khi bạn nhúng một tài sản lớn vào stylesheet.

Đầu vàoĐầu raTăng
3 byte4 ký tự133%
1 KB1.368 ký tự133%
1 MB~1,37 MB133%

Chế độ Văn bản và chế độ File

Chế độ Văn bản chuyển đổi ngay khi gõ, dành cho việc thường ngày: một đoạn token cần đọc, một giá trị cấu hình, một chuỗi ngắn. Nó chặn ở 1 MB, và giới hạn đó nói về sức chịu của ô nhập liệu chứ không phải của bộ mã hóa.

Chế độ File lo phần còn lại. File được đọc theo dòng và chuyển từng phần, nên file lớn không làm treo tab: việc nặng chạy ngoài luồng chính, trang vẫn phản hồi trong lúc thanh tiến độ chạy. Bạn thấy trước phần đầu kết quả và có nút Tải về cho toàn bộ.

Mẹo: Chỉ cần đọc một JWT thì dán đúng một đoạn — phần nằm giữa hai dấu chấm — và bật bảng chữ URL-safe. Token không có padding, không sao cả: bộ giải mã chấp nhận thiếu padding.

Chuẩn và URL-safe khác nhau ở đâu

Hai bảng chữ chỉ khác nhau đúng hai ký tự, ở vị trí 62 và 63:

Vị tríChuẩnURL-safe
62dấu cộnggạch ngang
63gạch chéogạch dưới

Mọi thứ còn lại y hệt nhau, nên một giá trị tình cờ không chứa hai ký tự đó sẽ giống nhau ở cả hai bảng. Chính điều này làm lỗi khó phát hiện: chuỗi ngắn mã ra giống nhau, chuỗi dài thì âm thầm khác. Khi giải mã, công cụ này nhận cả hai mà không cần bạn khai báo, nên token dán từ đâu vào cũng chạy.

Về padding

Dấu bằng ở cuối không phải dữ liệu. Base64 xuất bốn ký tự cho mỗi ba byte, và khi đầu vào không chia hết thì nhóm cuối bị thiếu:

  • f (1 byte) thành Zg==
  • fo (2 byte) thành Zm8=
  • foo (3 byte) thành Zm9v, không cần đệm gì

Có hệ thống bắt buộc padding, có hệ thống lại từ chối, còn JWT thì bỏ hẳn. Công tắc quyết định thứ được ghi ra; còn bộ giải mã thì kiểu nào cũng nhận.

Data URI

Bật tùy chọn data URI khi mã hóa file sẽ bọc kết quả bằng tiền tố mà trình duyệt cần để coi nó là tài nguyên nhúng, và tự điền loại file giúp bạn. Kết quả dán thẳng vào background-image trong CSS hay thẻ img trong HTML là chạy. Chiều ngược lại đối xứng: dán cả data URI vào thì tiền tố được nhận ra và bỏ đi trước khi giải mã phần dữ liệu.

Nhúng kiểu này là một đánh đổi thật sự. Nó bớt được một request mạng, nên icon nhỏ hay được nhúng, nhưng nó cũng làm file chứa nó phình thêm một phần ba và không cache riêng được. Dưới vài KB thì thường lợi; trên mức đó thì thường không.

Khi giải mã thất bại

Có hai thứ hỏng được, và công cụ phân biệt rạch ròi:

  • Ký tự không hợp lệ. Có gì đó trong đầu vào không thuộc bảng chữ nào cả. Vị trí được báo ra để bạn nhìn thẳng vào chỗ đó — hay gặp nhất là dấu nháy lạc, dấu ba chấm do trình soạn thảo tự đổi, hoặc một mẩu JSON bao quanh bị bôi đen theo.
  • Độ dài không thể đúng. Base64 chỉ hợp lệ ở vài độ dài nhất định, và một trong các số dư là bất khả. Gần như luôn có nghĩa giá trị đã bị cắt cụt trên đường đi.

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

Văn bản hay file của tôi có bị tải lên máy chủ không?
Không. Cả ô văn bản lẫn chế độ file đều chạy hoàn toàn trong tab trình duyệt — việc mã hóa do JavaScript trên máy bạn thực hiện, không có request nào mang dữ liệu đi đâu cả. Bạn tự kiểm chứng được: mở tab Network của trình duyệt rồi chuyển đổi thử, sẽ không thấy request nào. Đó chính là lý do nên dùng trang này cho khóa riêng tư, bản xuất dữ liệu khách hàng hay tài sản chưa công bố.
File lớn tới đâu thì chuyển được?
Chế độ File đọc file theo dòng và chuyển từng phần một, nên nó không bị chặn bởi kích thước một khối bộ nhớ như các công cụ chỉ cho dán. Trên thực tế giới hạn là bộ nhớ trống của máy bạn, vì kết quả được giữ lại cho tới khi bạn bấm Tải về. Chế độ Văn bản cố tình chặn ở 1 MB — con số đó nói về sức chịu của ô nhập liệu, không phải của bộ mã hóa.
Base64 URL-safe là gì và khi nào cần?
Base64 chuẩn dùng hai ký tự cộng và gạch chéo, mà cả hai đều có nghĩa riêng trong URL nên sẽ bị escape khi đặt vào đó. Bảng chữ URL-safe đổi chúng thành gạch ngang và gạch dưới để giá trị còn nguyên khi dán vào query string hay đường dẫn. JSON Web Token, JSON Web Key và phần lớn API hiện đại đều dùng dạng URL-safe, nên khi giải mã một đoạn token thì bạn cần bật tùy chọn đó.
Sao kết quả lại kết thúc bằng một hai dấu bằng?
Base64 xử lý theo nhóm ba byte, mỗi nhóm ra đúng bốn ký tự. Khi độ dài đầu vào không chia hết cho ba thì nhóm cuối bị thiếu, và dấu bằng đệm cho đủ bội số của bốn. Chúng không mang dữ liệu. Tắt padding là an toàn với mọi hệ thống tự đo giá trị, và nhiều API còn thích thế hơn — bộ giải mã ở đây nhận cả hai dạng bất kể bạn gạt công tắc thế nào.
Công cụ báo đầu vào bị cắt cụt nghĩa là sao?
Sau khi bỏ khoảng trắng và padding, chuỗi Base64 chỉ có thể dài 4n, 4n+2 hoặc 4n+3 ký tự. Độ dài 4n+1 để thừa đúng một nhóm sáu bit không biết đi đâu, tức là đã mất ký tự — thường do copy hụt hoặc một dòng bị cắt. Thông báo có kèm số ký tự đếm được để bạn đối chiếu với nguồn.
Dán thẳng một data URI vào giải mã được không?
Được. Cứ dán cả cụm kể cả tiền tố, phần đánh dấu data từ đầu cho tới dấu phẩy đầu tiên sẽ được nhận ra và bỏ đi trước khi giải mã. Chiều ngược lại cũng vậy: mã hóa file với tùy chọn data URI bật lên là ra thứ dán thẳng được vào thuộc tính background-image trong CSS hay thẻ img trong HTML.
Có xử lý đúng tiếng Việt và Unicode không?
Có. Văn bản được chuyển sang byte UTF-8 trước khi mã hóa, nên dấu thanh tiếng Việt, chữ Hán, Nhật, Hàn và emoji đều khứ hồi chính xác. Khi giải mã, byte được kiểm tra UTF-8 nghiêm ngặt: nếu chúng không phải văn bản hợp lệ thì công cụ nói thẳng và mời tải về, thay vì nhồi ô kết quả đầy ký tự thay thế làm hỏng ngầm thao tác copy sau đó.