T

Text Machine

Công cụ văn bản mạnh mẽ, ngay trong trình duyệt của bạn

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. 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. 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. 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. 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ì?
Encode chuyển văn bản thông thường thành biểu diễn Base64 của nó, còn Decode lấy một chuỗi Base64 và dựng lại văn bản gốc. Hãy chuyển qua lại giữa hai chế độ bằng nút Mode.
Tùy chọn URL-safe có tác dụng gì?
Base64 URL-safe thay các ký tự + và / bằng - và _ và loại bỏ phần đệm = ở cuối, nên kết quả có thể được đưa thẳng vào URL, chuỗi truy vấn và tên tệp mà không cần thoát ký tự.
Công cụ có xử lý được emoji và ký tự không phải tiếng Anh không?
Có. Văn bản được mã hóa thành UTF-8 trước khi chuyển đổi, nên chữ có dấu, các hệ chữ không phải Latinh và emoji đều được giữ chính xác khi bạn mã hóa và giải mã chúng.
Điều gì xảy ra nếu tôi dán Base64 không hợp lệ khi giải mã?
Công cụ phát hiện Base64 sai định dạng và hiển thị thông báo dữ liệu không hợp lệ thay vì tạo ra kết quả vô nghĩa, nhắc bạn kiểm tra lỗi gõ hoặc chuyển sang chế độ Encode.
Dữ liệu của tôi có được gửi đi đâu không?
Không. Bộ chuyển đổi chạy hoàn toàn trong trình duyệt bằng JavaScript, nên văn bản và chuỗi Base64 của bạn không bao giờ rời khỏi thiết bị, an toàn cho dữ liệu nhạy cảm hoặc độc quyền.

Công cụ liên quan

Tiếp tục với những công cụ hữu ích này

URL Encoder / Decoder

Trình giải mã JWT

Công cụ Mã hóa / Giải mã HTML

Bộ Chuyển Đổi HTML sang Văn Bản

Trình định dạng JSON

Trình kiểm tra Regex