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

Mã hóa, giải mã Base64: văn bản, tệp, URL-safe, data URI có xem trước.

Công cụ này làm gì

Base64 là cách viết mọi dữ liệu, chữ hay nhị phân, chỉ bằng 64 ký tự an toàn: chữ cái, chữ số, dấu cộng và dấu gạch chéo. Nó tồn tại vì nhiều hệ thống chuyên chở dữ liệu như email, JSON, URL hay thuộc tính HTML chỉ tin cậy được văn bản thuần. Công cụ này chuyển đổi hai chiều. Mã hóa nhận văn bản bạn gõ hoặc một tệp bạn mở; Giải mã nhận Base64 và trả lại văn bản, hoặc tệp nếu đó không phải văn bản. Mọi thứ diễn ra trong trình duyệt nên khóa riêng, token hay tài liệu không bao giờ bị tải lên.

Cách dùng

  1. Chọn Mã hóa hoặc Giải mã.
  2. Gõ hoặc dán nội dung, nhấn "Mở tệp" hoặc thả tệp vào trang. Kết quả hiện ra ngay khi bạn gõ.
  3. Sao chép hoặc tải kết quả. "Dùng làm đầu vào" chuyển kết quả sang thẻ kia, cách nhanh để kiểm tra mã hóa rồi giải mã có ra đúng bản gốc không.

Khi giải mã, bạn không cần làm sạch chuỗi trước. Dấu cách và xuống dòng bị bỏ qua, dấu = thiếu ở cuối được thêm lại, chấp nhận ký tự URL-safe - và _, và cả data: URI cũng được bóc ra. Công cụ cho biết nó đã làm điều nào. Nếu chuỗi thật sự không phải Base64, nó chỉ ra ký tự sai và vị trí.

UTF-8 và cái bẫy dấu tiếng Việt

Base64 mã hóa byte chứ không phải chữ, nên văn bản phải được đổi thành byte trước. Công cụ dùng UTF-8, bảng mã của web. Từ café là năm byte 63 61 66 c3 a9, Base64 là Y2Fmw6k=. Lỗi thường gặp là đưa văn bản vào hàm btoa cũ của trình duyệt, vốn coi mỗi ký tự là một byte: nó cho Y2Fm6Q==, và các hệ thống khác giải mã ra "caf" kèm một byte sai, hoặc từ chối hẳn với chữ như Việt hay emoji. Chuỗi "Hello, Việt Nam! 😀 café" được mã hóa thành SGVsbG8sIFZp4buHdCBOYW0hIPCfmIAgY2Fmw6k= và giải mã lại nguyên vẹn.

Chuẩn, URL-safe, đệm và độ dài dòng

  • Chuẩn dùng + và /, hai ký tự có nghĩa riêng trong URL. Với URL, tên tệp hay JWT hãy chọn URL-safe, viết - và _. Bốn byte fb ff fe ff là +//+/w== dạng chuẩn và -__-_w== dạng URL-safe.
  • Đệm thêm = để độ dài chia hết cho bốn. Nhiều nơi dùng URL-safe, kể cả ba phần của JWT, bỏ phần này; hãy tắt nó. Phần đầu {"alg":"HS256","typ":"JWT"} là eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9, không cần đệm.
  • Độ dài dòng ngắt kết quả thành dòng 64 ký tự (PEM, dùng cho chứng chỉ và khóa) hoặc 76 (MIME, dùng cho tệp đính kèm email). Các trường hợp khác để một dòng.

Tệp, ảnh và data URI

Mở bất kỳ tệp nào để mã hóa, tối đa 20 MB. Bật Dạng data: URI để có giá trị dán được ngay như data:image/png;base64,iVBOR…, dùng cho nguồn của thẻ <img> hay url() trong CSS. Cách này tiện với biểu tượng nhỏ, nhưng làm dữ liệu lớn thêm một phần ba và trình duyệt không lưu đệm riêng được, nên với tệp trên vài kilobyte hãy dùng tệp thường; có thể thu nhỏ ảnh trước bằng bộ công cụ ảnh. Khi giải mã ra ảnh bạn thấy bản xem trước, và những gì không phải văn bản như ảnh, PDF hay ZIP được đưa ra dưới dạng tải xuống với đuôi tệp đúng.

Cần biết

  • Base64 không phải mã hóa bảo mật. Ai cũng giải mã được, đừng dùng để giấu bí mật. Muốn kiểm tra tệp có nguyên vẹn, hãy dùng kiểm tra mã băm tệp.
  • Dữ liệu lớn hơn. Cứ 3 byte thành 4 ký tự, tăng khoảng 33%; 1000 byte thành 1336 ký tự kể cả phần đệm.

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

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

Không. Đó chỉ là cách viết byte thành văn bản, ai cũng đảo ngược được. Đừng dùng để bảo vệ mật khẩu hay bí mật.

Vì sao văn bản giải mã bị lỗi hoặc ra ký tự lạ?

Có thể văn bản gốc được mã hóa bằng bảng mã khác UTF-8, hoặc dữ liệu vốn không phải văn bản. Công cụ đọc kết quả theo UTF-8 và đưa ra tệp tải xuống khi các byte không phải văn bản hợp lệ.

Base64 và Base64URL khác nhau thế nào?

Base64URL thay + bằng - và / bằng _ để an toàn trong URL và tên tệp, thường bỏ phần đệm =. JWT dùng dạng này. Công cụ đọc được cả hai khi giải mã và viết được cả hai khi mã hóa.

Tệp của tôi có bị tải lên không?

Không. Trang đọc và chuyển đổi tệp ngay trong trình duyệt, không gửi gì đi đâu.