Mã hóa sang Base64
Văn bản, ảnh hay bất kỳ file nào — chuyển thành Base64 một cách chính xác. Ký tự có dấu và emoji được giữ nguyên, điều mà các cách viết một dòng thông thường không làm được. Không lưu trữ gì cả.
- Không bao giờ lưu trữ
- Không xếp hàng, không phải chờ
- Không cần đăng ký, không watermark
Văn bản được mã hóa dưới dạng UTF-8, nên dấu tiếng Việt và emoji vẫn giữ nguyên.
Base64 sẽ hiện ở đây.
Cách hoạt động
Dán văn bản hoặc thả file
Văn bản được mã hóa dưới dạng UTF-8. File được mã hóa từng byte một và không bao giờ bị lưu trữ.
Chọn kiểu mã hóa
Base64 chuẩn, Base64URL an toàn cho URL dùng cho token và query string, hoặc một data URI hoàn chỉnh sẵn sàng dán vào CSS hay thẻ <img>.
Sao chép kết quả
Sao chép kết quả, hoặc tải xuống dưới dạng file văn bản nếu nó lớn.
Vì sao dung lượng tăng đúng một phần ba
Base64 lấy mỗi lần ba byte và viết chúng thành bốn ký tự, mỗi ký tự mang sáu trong hai mươi bốn bit. Bốn chia ba chính là nguồn gốc của con số 33 phần trăm nổi tiếng — đó là phép tính, không phải sự kém hiệu quả, và không bộ mã hóa nào làm tốt hơn mà vẫn nằm trong phạm vi ký tự in được. Khi dữ liệu không chia hết cho ba, nhóm cuối được đệm và đánh dấu bằng một hoặc hai dấu =, đó là lý do độ dài của mọi chuỗi base64 luôn là bội số của bốn.
Có hai bảng ký tự, và chọn nhầm là vấn đề phổ biến nhất người ta gặp khi đến đây. Bảng ký tự chuẩn kết thúc bằng + và /, cả hai đều có ý nghĩa trong URL — dấu cộng thành dấu cách trong query string còn dấu gạch chéo trông như dấu phân cách đường dẫn. Biến thể an toàn cho URL dùng - và _ thay thế, và là thứ được dùng cho JSON Web Token, tên file và mọi thứ xuất hiện trong một địa chỉ. Ngoài điểm đó chúng giống hệt nhau, và một giá trị mã hóa bằng bảng này rồi giải mã theo bảng kia sẽ lỗi theo kiểu trông như dữ liệu bị hỏng.
Ngắt dòng là chi tiết còn lại phụ thuộc vào ngữ cảnh. File đính kèm email yêu cầu dòng dài 76 ký tự, chứng chỉ và khóa PEM yêu cầu 64, còn data URI hay một trường JSON thì không được có ngắt dòng nào. Ở đây ngắt dòng mặc định tắt vì không ngắt dòng là trường hợp phổ biến hiện nay; hãy bật nó khi đích đến là header email hoặc một khối -----BEGIN-----, vốn sẽ từ chối một dòng duy nhất dài dằng dặc.
Base64 không phải là mã hóa bảo mật và hoàn toàn không bảo vệ được gì. Nó chỉ là việc đổi bảng ký tự — ai cũng đảo ngược được ngay lập tức, và mọi công cụ quét bảo mật đều tự động làm vậy. Mục đích của nó là đưa dữ liệu nhị phân đi qua những kênh chỉ chấp nhận văn bản: nội dung email, trường JSON, tài liệu XML, data URI trong stylesheet. Dùng nó để giấu mật khẩu trong file cấu hình chẳng che giấu được gì trước bất kỳ ai chịu nhìn vào.
Khi bạn cần công cụ khác
Trên dòng lệnh, base64 -w 0 file.bin mã hóa không ngắt dòng trên Linux và base64 thuần làm điều tương tự trên macOS, còn openssl base64 -A hoạt động giống hệt ở mọi nơi. Với bảng ký tự an toàn cho URL, basenc --base64url là lệnh làm đúng mà không cần bước thay thế ký tự.
Với file lớn, mọi thứ ở đây đều là cách tiếp cận sai — toàn bộ file được giữ trong bộ nhớ, và việc mã hóa làm nó phình thêm một phần ba trước khi làm được gì khác. Công cụ dòng lệnh thì xử lý theo luồng, và trong code thì ngôn ngữ nào cũng có bộ mã hóa tăng dần. Cũng nên tự hỏi liệu có thực sự cần base64 không: gửi dữ liệu nhị phân dưới dạng multipart/form-data hoặc raw body sẽ tránh được cả vấn đề bộ nhớ lẫn 33 phần trăm kia.
Câu hỏi thường gặp
Văn bản hoặc file của tôi có bị lưu ở đâu không?
Không. Không lưu trữ gì cả, không ghi log gì cả, và không máy chủ nào nhìn thấy nó — và công cụ vẫn hoạt động khi đã ngắt mạng. Với những công cụ này, đó không phải là chuyện cho có. Thứ người ta dán vào các công cụ mã hóa và giải mã online thường là dữ liệu đang có hiệu lực: token phiên đăng nhập, khóa API, header Authorization, dữ liệu khách hàng. Dán một thứ như vậy vào một trang gửi nó đi đâu đó là làm lộ thông tin, bất kể trang đó hứa hẹn gì về việc xóa.
Vì sao ký tự có dấu và emoji dùng được ở đây?
Vì văn bản được chuyển thành các byte UTF-8 trước khi mã hóa, đó là thứ tự đúng và là bước mà phần lớn các cách làm nhanh bỏ qua. Hàm `btoa` có sẵn của trình duyệt hoàn toàn không nhận văn bản — nó nhận một byte cho mỗi ký tự, nên `btoa("café")` báo lỗi ngay. Cách lách phổ biến, `btoa(unescape(encodeURIComponent(s)))`, chạy được là nhờ may mắn và hỏng khi gặp emoji và các ký tự khác ngoài phạm vi cơ bản. Trang này mã hóa UTF-8 đúng cách, một lần duy nhất, nên 日本語 và 🎉 đều đi qua được và giải mã lại giống hệt.
Base64URL là gì và khi nào tôi cần nó?
Đó là Base64 với hai ký tự được đổi: + thành -, / thành _, và phần đệm = ở cuối bị bỏ đi. Nó tồn tại vì +, / và = đều có ý nghĩa trong URL, nên Base64 thông thường bị biến dạng khi đi trong query string hay đường dẫn. JWT, token OAuth và mọi thứ trong URL đều dùng Base64URL. Nếu bạn định đưa kết quả vào một đường link, hãy chọn nó.
Base64 có mã hóa bảo mật hay bảo vệ được gì không?
Không, và điều này cần nói thẳng. Base64 là một kiểu mã hóa ký tự (encoding), không phải mã hóa bảo mật (encryption) — không có khóa, không có bí mật nào. Bất kỳ ai nhìn thấy chuỗi đều giải mã được chỉ trong một bước, kể cả trên trang này. Nó tồn tại để đưa dữ liệu nhị phân đi an toàn qua các kênh chỉ chấp nhận văn bản, như file đính kèm email và data URI. Nếu thứ gì đó cần được giữ bí mật, nó cần mã hóa bảo mật; Base64 hoàn toàn không bảo vệ được gì.
Vì sao Base64 lớn hơn file của tôi?
Lớn hơn khoảng 33%, luôn luôn như vậy. Base64 biểu diễn mỗi 3 byte bằng 4 ký tự văn bản, nên dung lượng tăng thêm một phần ba theo thiết kế, cộng thêm một chút phần đệm. Đó là cái giá của việc biến dữ liệu nhị phân thành văn bản, và là lý do nhúng một ảnh lớn dưới dạng data URI vào CSS thường là một đánh đổi tồi.
Tôi có thể mã hóa ảnh thành data URI không?
Được — thả ảnh vào và chọn “Data URI”. Bạn nhận được chuỗi `data:image/png;base64,…` hoàn chỉnh, đã điền sẵn đúng media type, sẵn sàng dán vào stylesheet, thẻ <img> hay mẫu email.
Có giới hạn dung lượng không?
Giới hạn là bộ nhớ khả dụng, chứ không phải mức trần cố định, và nó khá rộng rãi — file nhiều megabyte vẫn mã hóa tốt. Việc mã hóa được chia thành từng phần chính là để xử lý file lớn; cách làm hiển nhiên sẽ sập ở khoảng 125 KB với lỗi “Maximum call stack size exceeded”, một lỗi có ở rất nhiều công cụ mã hóa online.
Nên biết: Base64 làm dữ liệu lớn hơn khoảng 33% — đó là bản chất của định dạng, không phải lỗi. File được đọc trọn vào bộ nhớ, nên một file rất lớn có thể làm cạn bộ nhớ của tab trên điện thoại trước khi xong. Ngắt dòng mặc định tắt; định dạng email và PEM yêu cầu bật.
Đặt công cụ này lên website của bạn
Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.