Chuyển đến nội dung

Công cụ Mã hóa Giải mã Base64 - Trình chuyển đổi Base64 Trực tuyến Miễn phí

Công cụ mã hóa giải mã base64 miễn phí. Chuyển đổi văn bản sang Base64 hoặc giải mã các chuỗi Base64 ngay lập tức. Hỗ trợ mã hóa tiêu chuẩn và URL an toàn. Không cần đăng nhập.

Bộ Mã Hóa/Giải Mã Base64

Chuyển đổi văn bản sang và từ mã hóa Base64

Máy tính tải...
📚

Tài liệu hướng dẫn

Mã hóa Base64 là gì?

Base64 là cách chuyển đổi mọi loại dữ liệu, bao gồm dữ liệu nhị phân như hình ảnh, thành văn bản thuần túy chỉ gồm chữ cái, chữ số và một vài ký hiệu. Bộ mã hóa base64 chuyển dữ liệu thành dạng văn bản này. Bộ giải mã base64 chuyển nó trở lại dữ liệu ban đầu. Các chương trình sử dụng Base64 để truyền dữ liệu nhị phân an toàn qua những hệ thống như email hoặc JSON, vốn yêu cầu văn bản thuần túy.

Base64 sử dụng một bảng chữ cái gồm 64 ký tự:

  • Chữ cái viết hoa A–Z (26 ký tự)
  • Chữ cái viết thường a–z (26 ký tự)
  • Chữ số 0–9 (10 ký tự)
  • Hai ký hiệu, thường là + và / (2 ký tự)

Một số hệ thống cũng sử dụng dấu bằng (=) ở cuối kết quả đầu ra để đệm. Phần đệm không thuộc bảng chữ cái gồm 64 ký tự; nó chỉ bổ sung để đủ độ dài.

Vì sao Base64 tồn tại

Nhiều giao thức văn bản cũ, bao gồm email (SMTP) và một số phần của HTTP, được xây dựng để truyền văn bản ASCII 7 bit. Chúng có thể làm hỏng các byte nhị phân thô, chẳng hạn các byte bên trong một hình ảnh JPEG. Base64 giải quyết vấn đề này bằng cách biểu diễn mỗi byte chỉ bằng các ký tự an toàn, có thể in được. Vì vậy, tệp đính kèm email, hình ảnh nhúng trong trang web và các trường nhị phân bên trong JSON thường được chuyển qua Base64 trước.

Base64 không phải là phương pháp nén và cũng không phải là mã hóa. Kết quả đã mã hóa luôn lớn hơn dữ liệu đầu vào, và bất kỳ ai cũng có thể giải mã nó mà không cần mật khẩu hoặc khóa.

Cách sử dụng công cụ này

  1. Nhập hoặc dán văn bản vào ô đầu vào.
  2. Chọn "Encode to Base64" để chuyển văn bản thành Base64, hoặc "Decode from Base64" để chuyển một chuỗi Base64 trở lại văn bản.
  3. Bật tính năng chuyển đổi trực tiếp để kết quả tự động cập nhật trong khi nhập.
  4. Sao chép kết quả bằng nút sao chép.

Công cụ đọc và ghi văn bản Unicode chuẩn, vì vậy các chữ cái có dấu, ký hiệu và emoji đều được mã hóa và giải mã chính xác, không chỉ các chữ cái tiếng Anh thông thường.

Cách thức hoạt động của mã hóa Base64

Base64 chuyển mỗi 3 byte đầu vào (24 bit) thành 4 ký tự đầu ra (mỗi ký tự chứa 6 bit), vì 24 chia cho 6 bằng 4.

  1. Lấy các byte đầu vào và viết chúng dưới dạng nhị phân.
  2. Nhóm các bit thành từng phần 24 bit (3 byte).
  3. Chia mỗi phần 24 bit thành bốn phần, mỗi phần 6 bit.
  4. Tra cứu từng số 6 bit (từ 0 đến 63) trong bảng chữ cái Base64 và ghi lại ký tự tương ứng.

Nếu độ dài dữ liệu đầu vào không phải là bội số của 3, phần cuối sẽ ngắn hơn. Bộ mã hóa đệm thêm các bit 0, sau đó thêm các ký tự = vào kết quả để kết quả vẫn được tạo thành các nhóm 4:

  • Một byte còn dư tạo ra 2 ký tự Base64 cùng với ==.
  • Hai byte còn dư tạo ra 3 ký tự Base64 cùng với một =.

Ví dụ về mã hóa Base64

Mã hóa từ "Hello":

  1. Giá trị ASCII: 72, 101, 108, 108, 111
  2. Nhị phân: 01001000 01100101 01101100 01101100 01101111
  3. 3 byte đầu tiên (24 bit) được chia thành bốn nhóm 6 bit: 010010 000110 010101 101100, tương ứng với các số 18, 6, 21, 44 → các ký tự S, G, V, s.
  4. 2 byte còn lại (16 bit) được chia thành ba nhóm 6 bit, trong đó thêm 2 bit 0 ở cuối: 011011 000110 111100, tương ứng với các số 27, 6, 60 → các ký tự b, G, 8.
  5. Vì còn dư 2 byte nên thêm một = ở cuối.
  6. Kết quả: SGVsbG8=

Giải mã thực hiện ngược lại các bước này: mỗi ký tự được ánh xạ trở lại số 6 bit tương ứng, các bit được nối thành một dòng, rồi dòng đó được đọc lại thành các byte 8 bit.

Công thức tính độ dài đã mã hóa bằng Base64

Với dữ liệu đầu vào gồm n byte, độ dài kết quả mã hóa tính theo số ký tự là:

encoded_length = 4 × ⌈n / 3⌉

trong đó ⌈x⌉ nghĩa là làm tròn lên đến số nguyên gần nhất. Công thức này cho thấy tại sao kết quả Base64 luôn lớn hơn dữ liệu đầu vào khoảng một phần ba: cứ 3 byte đầu vào lại tạo ra 4 ký tự đầu ra, tức tăng 33%.

Base64 được sử dụng ở đâu

  • Tệp đính kèm email (MIME). Email được xây dựng cho văn bản, nên tệp đính kèm được chuyển thành Base64 trước khi gửi, khiến tệp đính kèm lớn hơn bản gốc khoảng 33%.
  • URI dữ liệu. Các hình ảnh nhỏ có thể được nhúng trực tiếp trong HTML hoặc CSS dưới dạng văn bản, chẳng hạn data:image/png;base64,iVBORw0KGgo..., nhờ đó không cần yêu cầu tệp riêng. Cách này phù hợp nhất với các tệp nhỏ, vì tệp lớn sẽ làm trang phình to và không thể được lưu vào bộ nhớ đệm riêng.
  • API và JSON. JSON không có cách gốc để chứa dữ liệu nhị phân thô, vì vậy các tệp nhị phân được gửi qua API JSON thường được mã hóa Base64 trước.
  • Xác thực cơ bản HTTP. Tiêu đề Authorization mã hóa tên người dùng và mật khẩu bằng Base64, chẳng hạn Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=. Bản thân cách này không an toàn; bất kỳ ai chặn được thông tin xác thực đều có thể đọc chúng, vì vậy chỉ nên sử dụng Xác thực cơ bản qua HTTPS.
  • Mã thông báo web JSON (JWT). Mỗi trong ba phần của JWT được mã hóa bằng Base64URL, một biến thể an toàn khi đặt bên trong URL.
  • Lưu trữ dữ liệu nhị phân dưới dạng văn bản. Các cơ sở dữ liệu hoặc tệp cấu hình chỉ chấp nhận văn bản đôi khi lưu dữ liệu nhị phân dưới dạng chuỗi Base64.

So sánh Base64 với các phương pháp mã hóa khác

Base64 an toàn cho URL thay thế các ký tự + và / tiêu chuẩn bằng - và _, vì + và / có ý nghĩa đặc biệt trong URL. Nó được dùng cho JWT, tham số truy vấn URL và tên tệp. Công cụ này tạo kết quả Base64 tiêu chuẩn; để chuyển sang dạng an toàn cho URL, chỉ cần thay thế hai ký tự đó.

Base32 sử dụng bảng chữ cái gồm 32 ký tự, vì vậy mỗi ký tự chứa 5 bit thay vì 6 bit. Nó chuyển mỗi 5 byte thành 8 ký tự, với phần dư 60% (8 ÷ 5 = 1,6), so với 33% của Base64. Base32 được chọn khi kết quả phải được nhập thủ công hoặc đọc qua điện thoại, vì nó tránh các chữ cái phân biệt hoa thường và những ký tự dễ nhầm lẫn.

Hệ thập lục phân sử dụng 16 ký tự (0–9, A–F) và cần 2 ký tự cho mỗi byte, làm tăng gấp đôi kích thước (phần dư 100%). Nó thường được dùng để hiển thị mã băm, màu sắc và địa chỉ MAC, trong đó khả năng đọc quan trọng hơn kích thước nhỏ gọn.

Khi nào không nên dùng Base64

Base64 làm tăng kích thước và chi phí CPU, nên không phù hợp với các tệp lớn được gửi qua mạng; gửi trực tiếp dữ liệu nhị phân thô sẽ nhỏ hơn và nhanh hơn. Không bao giờ nên dựa vào nó để che giấu thông tin nhạy cảm như mật khẩu hoặc khóa API, vì không cần bí mật nào để giải mã. Để lưu trữ các tệp lớn, kiểu cột nhị phân của cơ sở dữ liệu hoặc dịch vụ lưu trữ tệp thường phù hợp hơn một chuỗi Base64 dài trong trường văn bản.

Các lỗi thường gặp

  • Bỏ qua chuyển đổi UTF-8. Mã hóa văn bản có chữ cái dấu hoặc emoji mà không chuyển đổi trước thành các byte UTF-8 có thể làm hỏng kết quả.
  • Loại bỏ phần đệm. Một số hệ thống loại bỏ các ký tự = ở cuối. Hầu hết bộ giải mã vẫn có thể hoạt động nếu chuỗi được thêm phần đệm để độ dài trở thành bội số của 4, nhưng không phải bộ giải mã nào cũng chấp nhận điều đó, vì vậy giữ lại phần đệm sẽ an toàn hơn.
  • Ký tự xuống dòng còn sót lại. Các bộ mã hóa dựa trên MIME cũ chèn một lần xuống dòng sau mỗi 76 ký tự; hầu hết bộ giải mã hiện đại yêu cầu một chuỗi liên tục không có các ký tự này.
  • Nhầm lẫn giữa các biến thể. Base64 tiêu chuẩn và Base64 an toàn cho URL sử dụng các ký tự khác nhau tại cùng hai vị trí trong bảng chữ cái; giải mã bằng biến thể sai sẽ tạo ra dữ liệu rác hoặc lỗi.

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

Base64 có phải là một dạng mã hóa không? Không. Đây là phương pháp mã hóa văn bản có thể đảo ngược, không phải mã hóa bảo mật. Bất kỳ ai cũng có thể giải mã một chuỗi Base64 ngay lập tức mà không cần mật khẩu. Nếu dữ liệu cần được giữ bí mật, hãy sử dụng một thuật toán mã hóa như AES.

Tại sao Base64 làm dữ liệu lớn hơn? Vì nó dùng một ký tự đầy đủ để chỉ chứa 6 bit, trong khi một byte thô chứa 8 bit. Việc chuyển 3 byte (24 bit) thành 4 ký tự có nghĩa là kết quả có kích thước bằng 4/3, tức lớn hơn dữ liệu đầu vào khoảng 33%.

Base64 có thể mã hóa hình ảnh và các tệp nhị phân khác không? Có. Mọi tệp nhị phân, bao gồm hình ảnh, PDF và âm thanh, đều có thể được mã hóa bằng Base64 rồi giải mã trở lại chính xác từng byte. Cách này thường được dùng cho các hình ảnh nhỏ nhúng trong HTML hoặc CSS, nhưng không phù hợp với các tệp lớn.

Base64 và Base64URL khác nhau như thế nào? Base64URL thay thế các ký tự + và / tiêu chuẩn bằng - và _, nhờ đó kết quả an toàn khi đặt trong URL hoặc tên tệp mà không cần thêm bước thoát ký tự. JWT sử dụng Base64URL vì lý do này.

Tại sao chuỗi Base64 của tôi gây lỗi "invalid" khi giải mã? Các nguyên nhân phổ biến nhất là những ký tự không thuộc bảng chữ cái Base64, chẳng hạn - và _ được biến thể an toàn cho URL sử dụng, hoặc chuỗi có độ dài hơn một bội số của 4 đúng một đơn vị. Không có chuỗi Base64 hợp lệ nào có độ dài như vậy. Việc giải mã cũng thất bại khi các byte sau giải mã không phải là văn bản UTF-8 hợp lệ. Công cụ này bỏ qua khoảng trắng và ký tự xuống dòng bên trong chuỗi, đồng thời vẫn giải mã được chuỗi đã bị loại bỏ phần đệm = ở cuối.

Base64 bắt nguồn từ đâu? Kỹ thuật này bắt nguồn từ những phương pháp đầu tiên dùng để gửi dữ liệu nhị phân qua các hệ thống thư chỉ hỗ trợ văn bản trong thập niên 1980, và được tiêu chuẩn hóa chính thức như một phần của MIME trong RFC 2045 vào năm 1996. Đặc tả tham chiếu hiện tại cho Base64, Base32 và Base16 là RFC 4648.