Mã hóa / Giải mã Base64
Chuyển văn bản sang Base64 và giải mã ngược lại ngay trong trình duyệt của bạn. An toàn với UTF-8 cùng biến thể URL-safe tùy chọn — không có dữ liệu nào được tải lên máy chủ.
Đầu vào
0 dòng · 0 ký tự
Chế độ
URL-safe
Cách sử dụng Mã hóa / Giải mã Base64
- 1
Chọn Mã hóa hoặc Giải mã
Đặt Mode thành Encode để chuyển văn bản thành Base64, hoặc Decode để chuyển chuỗi Base64 trở lại thành văn bản dễ đọc.
- 2
Nhập dữ liệu đầu vào
Gõ hoặc dán văn bản hay chuỗi Base64 vào khung nhập liệu, và tùy chọn bật URL-safe để dùng bảng ký tự thân thiện với URL và tên tệp.
- 3
Chuyển đổi
Nhấn Convert để xử lý dữ liệu cục bộ ngay trong trình duyệt, với hỗ trợ đầy đủ UTF-8 và emoji.
- 4
Sao chép hoặc hoán đổi
Sao chép kết quả, hoặc dùng Swap để đưa kết quả trở lại ô nhập và đảo chế độ để thực hiện một vòng chuyển đổi nhanh.
Hướng dẫn toàn diện về mã hóa Base64
Base64 thực chất là gì
Base64 là một sơ đồ mã hóa từ nhị phân sang văn bản: nó biểu diễn dữ liệu nhị phân bất kỳ chỉ bằng 64 ký tự ASCII in được, những ký tự có thể đi qua an toàn các hệ thống vốn được xây dựng cho văn bản thuần. Bảng chữ cái tiêu chuẩn, được định nghĩa trong RFC 4648, gồm 26 chữ cái viết hoa A-Z, 26 chữ cái viết thường a-z, mười chữ số 0-9, và hai ký hiệu + và /. Tổng cộng là 64 ký hiệu, vừa đủ để biểu diễn sáu bit dữ liệu cho mỗi ký tự, bởi hai mũ sáu bằng 64.
Cái tên mang nghĩa đen. Cũng như hệ cơ số 10 dùng mười ký hiệu chữ số và hệ cơ số 16 (hex) dùng mười sáu, hệ cơ số 64 dùng sáu mươi tư. Việc mã hóa hoàn toàn có thể đảo ngược và không mất dữ liệu: bất kỳ byte nào bạn mã hóa đều trở lại giống hệt từng byte khi bạn giải mã, và đó chính là toàn bộ mục đích của nó.
Vì sao Base64 tồn tại
Nhiều kênh được thiết kế để truyền tải văn bản chứ không phải byte thô, và chúng làm hỏng bất cứ thứ gì nằm ngoài dải ASCII in được. Email là ví dụ kinh điển: chuẩn SMTP nguyên thủy là một giao thức bảy bit có thể làm hỏng hoặc cắt bỏ bit cao của dữ liệu nhị phân, nên MIME dùng Base64 để gửi đi các tệp đính kèm hình ảnh và tệp một cách an toàn. Vấn đề tương tự xuất hiện mỗi khi dữ liệu nhị phân cần đi nhờ bên trong một thứ gì đó dạng văn bản.
Bạn bắt gặp Base64 liên tục mà không hề để ý. Data URI nhúng hình ảnh trực tiếp vào HTML và CSS dưới dạng data:image/png;base64,iVBORw0K... nên một biểu tượng nhỏ không cần đến một yêu cầu riêng. JSON Web Token (JWT) là ba đoạn Base64url nối với nhau bằng dấu chấm. Xác thực HTTP Basic gửi đi Base64 của username:password. Trình duyệt cung cấp nó qua các hàm tích hợp sẵn btoa và atob, và đây là cách tiêu chuẩn để nhét dữ liệu nhị phân vào JSON, XML hay một URL.
Ánh xạ 3 byte sang 4 ký tự hoạt động như thế nào
Base64 xử lý đầu vào theo từng nhóm ba byte một. Ba byte là 24 bit, và 24 chia đều thành bốn nhóm sáu bit. Mỗi nhóm sáu bit là một con số từ 0 đến 63, con số này trở thành một ký tự trong bảng chữ cái. Vì vậy cứ mỗi 3 byte đầu vào luôn tạo ra đúng 4 ký tự đầu ra, đó là lý do Base64 làm phình dữ liệu lên khoảng một phần ba: dạng đã mã hóa lớn cỡ 133% so với bản gốc.
Vị trí trong bảng chữ cái mới là điều quan trọng. Chỉ số 0 là A, chỉ số 25 là Z, chỉ số 26 là a, chỉ số 51 là z, chỉ số 52 là 0, chỉ số 61 là 9, chỉ số 62 là +, và chỉ số 63 là /. Để đọc một chuỗi đã mã hóa bằng tay, bạn ánh xạ mỗi ký tự trở lại chỉ số của nó, viết chỉ số đó dưới dạng sáu bit, nối tất cả các bit lại, rồi cắt luồng bit trở lại thành các byte tám bit.
Một ví dụ cụ thể: mã hóa "Man"
Lấy ba chữ cái M, a, n. Giá trị byte ASCII của chúng là 77, 97 và 110, ở dạng nhị phân là 01001101, 01100001 và 01101110. Nối 24 bit đó thành một luồng: 010011010110000101101110. Bây giờ cắt nó thành bốn nhóm sáu bit: 010011, 010110, 000101, 101110.
Các nhóm đó là những con số 19, 22, 5 và 46. Tra mỗi con số trong bảng chữ cái cho ta T (chỉ số 19), W (chỉ số 22), F (chỉ số 5) và u (chỉ số 46). Vậy "Man" mã hóa thành "TWFu" — một phép chuyển đổi ba byte sang bốn ký tự gọn gàng, không cần phần đệm. Giải mã chỉ đơn giản là chạy ngược lại các bước trên.
Phần đệm và dấu bằng
Đầu vào không phải lúc nào cũng là bội số của ba byte, nên Base64 cần một cách để báo hiệu phần dư. Khi còn dư một byte, nó mã hóa thành hai ký tự theo sau là hai dấu đệm (==); khi còn dư hai byte, chúng mã hóa thành ba ký tự theo sau là một dấu đệm (=). Ký tự đệm không mang dữ liệu nào; nó chỉ cho bộ giải mã biết nhóm cuối cùng biểu diễn bao nhiêu byte thực.
Ví dụ, chữ cái đơn lẻ "M" (byte 77, nhị phân 01001101) được đệm thành sáu bit là 010011 và 010000, cho ra T và Q, rồi hoàn thiện bằng == để thành "TQ==". Từ "Ma" (hai byte) mã hóa thành "TWE=" với một dấu bằng ở cuối. Đếm số dấu bằng ở cuối bất kỳ chuỗi Base64 nào sẽ cho bạn biết độ dài bản gốc có phải là bội số của ba hay không.
Biến thể an toàn cho URL
Các ký tự + và / tiêu chuẩn gây rắc rối ở những nơi mà chúng vốn đã có ý nghĩa riêng. Dấu gạch chéo tách các đoạn đường dẫn trong một URL, và dấu cộng bị diễn giải thành khoảng trắng trong các chuỗi truy vấn được mã hóa dạng form, nên một giá trị Base64 thông thường có thể bị hỏng khi đưa vào một liên kết hoặc một tên tệp. Bảng chữ cái an toàn cho URL, cũng từ RFC 4648, khắc phục điều này bằng cách đổi + thành - (gạch nối) và / thành _ (gạch dưới).
Bật tùy chọn URL-safe trong công cụ này sẽ tạo ra biến thể đó và cũng loại bỏ phần đệm = ở cuối, vì các dấu bằng cũng cần được thoát trong URL. Kết quả khớp thẳng vào các tham số truy vấn, các đoạn đường dẫn, cookie và tên tệp. Đây là kiểu mã hóa được dùng bởi JWT và nhiều web API. Chỉ cần nhớ giải mã đầu vào URL-safe bằng một bộ giải mã URL-safe, bởi các ký tự - và _ không hợp lệ trong bảng chữ cái tiêu chuẩn.
Base64 là mã hóa biểu diễn, không phải mã hóa bảo mật
Đây là sự thật quan trọng nhất và bị hiểu lầm nhiều nhất về Base64. Việc mã hóa chỉ che giấu dữ liệu trước mắt thường; nó không cung cấp chút bảo mật nào. Không có khóa và không có bí mật, nên ai cũng có thể giải mã một chuỗi Base64 ngay lập tức bằng bất kỳ công cụ nào, kể cả công cụ này. Coi Base64 như một cách để giấu mật khẩu, khóa API hay dữ liệu cá nhân là một sai lầm bảo mật nghiêm trọng.
Base64 giải quyết một vấn đề vận chuyển, không phải vấn đề giữ bí mật: nó làm cho dữ liệu nhị phân an toàn để di chuyển qua các kênh chỉ hỗ trợ văn bản. Nếu bạn cần sự bảo vệ thực sự, hãy mã hóa dữ liệu bằng một thuật toán bảo mật thật như AES trước, và chỉ sau đó mới mã hóa Base64 cho văn bản mã hóa nếu bạn cũng cần nó di chuyển dưới dạng văn bản. Mã hóa biểu diễn và mã hóa bảo mật là hai công việc khác nhau.
Những lỗi thường gặp và mẹo thực tế
Lỗi thường gặp nhất là nhầm lẫn bộ ký tự. Bản thân Base64 chỉ biết đến byte, nên trước khi mã hóa văn bản bạn phải quyết định văn bản đó trở thành byte như thế nào. Công cụ này dùng UTF-8, đó là lý do các chữ cái có dấu và emoji được khôi phục đúng qua một vòng chuyển đổi; mã hóa cùng một chuỗi bằng một bộ ký tự khác ở nơi khác sẽ cho ra Base64 khác. Một cạm bẫy phổ biến thứ hai là khoảng trắng: các ngắt dòng do một số bộ mã hóa chèn vào (MIME ngắt dòng ở 76 ký tự) không phải là một phần của dữ liệu và phải được loại bỏ trước khi giải mã, dù một số bộ giải mã nghiêm ngặt có thể từ chối chúng.
Các cạm bẫy khác bao gồm việc trộn lẫn bảng chữ cái tiêu chuẩn và bảng chữ cái URL-safe, quên rằng một chuỗi không có phần đệm có thể cần được khôi phục phần đệm trước khi một bộ giải mã nghiêm ngặt chấp nhận nó, và lầm tưởng rằng Base64 tiết kiệm dung lượng — nó không bao giờ làm vậy, nó luôn làm dữ liệu phình thêm khoảng một phần ba. Khi một lần giải mã thất bại ở đây, trước tiên hãy kiểm tra xem có một khoảng trắng lạc lõng, một dấu bằng bị thiếu, hay một dấu - hoặc _ vốn thuộc về bảng chữ cái URL-safe hay không.
Câu hỏi thường gặp
Khác biệt giữa Encode và Decode ở đây là gì?
Tùy chọn URL-safe có tác dụng gì?
Công cụ có xử lý được emoji và ký tự không phải tiếng Anh không?
Điều gì xảy ra nếu tôi dán Base64 không hợp lệ khi giải mã?
Dữ liệu của tôi có được gửi đi đâu không?
Công cụ liên quan
Tiếp tục với những công cụ hữu ích này