← Tất cả công cụ

Mã Hóa & Giải Mã Base64

Mã hóa và giải mã Base64 tức thì trong trình duyệt. Tìm hiểu Base64 là gì, tại sao nó tăng kích thước 33% và đây là mã hóa chứ không phải encryption.

Base64 là gì và tại sao nó tồn tại

Base64 là một cơ chế mã hóa nhị phân sang văn bản. Nó lấy các byte thô — loại dữ liệu tạo nên hình ảnh, file nén, khóa mã hóa, hoặc bất cứ thứ gì không phải văn bản thuần túy có thể đọc được — và viết lại chúng bằng một bảng chữ cái nhỏ, an toàn gồm 64 ký tự in được: 26 chữ hoa A-Z, 26 chữ thường a-z, 10 chữ số 0-9, và hai ký tự bổ sung, thường là +/. Dấu bằng được dùng để đệm ở cuối. Vì mọi ký tự tạo ra đều là ASCII thông thường, kết quả có thể truyền qua các hệ thống chỉ được thiết kế để xử lý văn bản.

Đó là lý do duy nhất Base64 được phát minh. Nhiều giao thức cũ hơn — email là ví dụ điển hình — giả định nội dung chúng mang là văn bản. Nếu bạn đưa dữ liệu nhị phân thô vào, một số byte sẽ bị biến dạng, bị lược bỏ, hoặc bị hiểu là ký tự điều khiển, và dữ liệu đến nơi bị hỏng. Base64 giải quyết vấn đề bằng cách chuyển đổi các byte sang dạng mà bất kỳ kênh an toàn với văn bản nào cũng sẽ truyền qua nguyên vẹn. Dữ liệu gốc sau đó có thể được tái tạo chính xác ở phía kia.

Abstract glowing stream of binary data transforming into a text character stream in dark indigo with cyan and gold light
Base64 định hình lại các byte thô thành luồng ký tự an toàn, thân thiện với văn bản.

Cách chuyển đổi hoạt động

Về mặt cơ học, Base64 nhóm đầu vào thành các khối ba byte — tức là 24 bit — rồi chia lại 24 bit đó thành bốn nhóm sáu bit mỗi nhóm. Sáu bit có thể biểu diễn 64 giá trị khả thi, đó chính xác là lý do bảng chữ cái có 64 ký tự. Vì vậy ba byte đầu vào luôn trở thành bốn ký tự đầu ra. Khi độ dài đầu vào không phải bội số nguyên của ba, bộ mã hóa sẽ đệm nhóm cuối cùng bằng một hoặc hai ký tự = để bộ giải mã biết dữ liệu thực kết thúc ở đâu.

Tỷ lệ bốn-cho-ba này cũng là nguồn gốc của chi phí kích thước nổi tiếng: đầu ra Base64 lớn hơn dữ liệu gốc khoảng 33%. Nếu văn bản mã hóa được ngắt thành các dòng có chiều rộng cố định, như các tiêu chuẩn email thường yêu cầu, bạn trả thêm vài phần trăm cho các ngắt dòng. Chi phí đó là cái giá của tính tương thích, và đối với hầu hết các trường hợp đó là sự đánh đổi hợp lý.

Bạn gặp Base64 ở đâu

Khi bạn đã biết phải tìm gì, Base64 xuất hiện ở khắp nơi trong điện toán hàng ngày:

  • Data URI. Một hình ảnh nhỏ hoặc font chữ có thể được nhúng trực tiếp vào HTML hoặc CSS với URI data:, với nội dung file được viết ra dưới dạng Base64. Trình duyệt giải mã nó inline, tiết kiệm một yêu cầu mạng riêng biệt.
  • Đính kèm email. MIME, tiêu chuẩn cho phép email mang file, dựa vào Base64 để chuyển các đính kèm nhị phân qua hệ thống mail chỉ xử lý văn bản mà không bị hỏng.
  • Xác thực HTTP Basic. Header quen thuộc Authorization: Basic ... chỉ là tên người dùng và mật khẩu được nối bằng dấu hai chấm và mã hóa Base64 — đó chính xác là lý do tại sao xác thực Basic phải luôn chạy qua HTTPS.
  • Token và cấu hình. JSON Web Token, chứng chỉ, khóa SSH và vô số giá trị cấu hình được lưu trữ hoặc truyền dưới dạng Base64 để chúng tồn tại qua copy-paste và lưu trữ dạng văn bản.

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

Đây là điều quan trọng nhất cần hiểu, và nó khiến cả người mới bắt đầu lẫn lập trình viên lành nghề vấp ngã. Base64 không phải là mã hóa bảo mật (encryption) và không cung cấp bất kỳ bảo mật nào. Không có khóa bí mật, không có mật khẩu, và không có gì riêng tư trong đó. Quá trình chuyển đổi hoàn toàn công khai và có thể đảo ngược hoàn toàn: bất kỳ ai thấy chuỗi Base64 đều có thể giải mã trở lại các byte gốc trong một giây, sử dụng công cụ giống hệt công cụ này.

Vì vậy Base64 là nơi ẩn dấu kém cho mật khẩu, API key hoặc bất kỳ giá trị nhạy cảm nào. Nếu một chuỗi trông có vẻ bị xáo trộn, điều đó không có nghĩa là nó được bảo vệ. Mã hóa bảo mật, ngược lại, biến đổi dữ liệu bằng khóa bí mật để chỉ người giữ khóa đó mới có thể đọc được. Hai thứ giải quyết các vấn đề khác nhau: mã hóa bảo mật bảo vệ tính bí mật, Base64 bảo vệ tính tương thích. Chúng thường được dùng cùng nhau — bạn có thể mã hóa dữ liệu bằng AES rồi mã hóa Base64 ciphertext để nó có thể truyền qua kênh văn bản — nhưng cái này không bao giờ thay thế được cái kia.

An abstract image dissolving into a flowing stream of glowing characters and reassembling, indigo navy with cyan and gold
Mã hóa và giải mã hoàn toàn có thể đảo ngược — và không cung cấp bí mật nào.

Mã hóa (encode) và giải mã (decode)

Hai chiều là gương của nhau đơn giản thôi. Mã hóa lấy văn bản gốc hoặc dữ liệu nhị phân của bạn và tạo ra chuỗi ký tự Base64. Giải mã lấy chuỗi Base64 và tái tạo lại chính xác các byte gốc. Công cụ của chúng tôi thực hiện cả hai chiều trực tiếp trong trình duyệt của bạn — không có gì bạn nhập hoặc dán vào được gửi đến server, vì vậy thao tác hoàn toàn cục bộ và riêng tư. Điều đó giúp an toàn khi giải mã một token bạn đang debug hoặc mã hóa một đoạn bạn muốn nhúng, mà không để dữ liệu rời khỏi trang.

Để chuyển đổi liên quan, xem công cụ mã hóa/giải mã URL của chúng tôi cho percent-encoding, hoặc JWT decoder khi bạn cần kiểm tra các đoạn Base64 bên trong token. Bạn sẽ tìm thấy chúng cùng với phần còn lại của công cụ dành cho lập trình viên.

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

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

Không. Base64 là encoding, không phải encryption. Nó không dùng khóa và hoàn toàn có thể đảo ngược bởi bất kỳ ai, vì vậy không cung cấp bảo mật nào. Hãy dùng mã hóa thực sự như AES hoặc RSA để bảo vệ dữ liệu nhạy cảm.

Tại sao Base64 làm dữ liệu lớn hơn?

Base64 chuyển mỗi ba byte đầu vào thành bốn ký tự đầu ra, thêm khoảng 33% vào kích thước. Nếu đầu ra được chia thành các dòng có độ dài cố định, ngắt dòng sẽ thêm vài phần trăm nữa.

Base64 sử dụng những ký tự nào?

Bảng chữ cái tiêu chuẩn gồm 26 chữ hoa, 26 chữ thường, các chữ số từ 0 đến 9, cộng với ký hiệu dấu cộng và dấu gạch chéo, với dấu bằng dùng để đệm ở cuối.

Tôi có thể lưu mật khẩu trong Base64 một cách an toàn không?

Không. Base64 chỉ thay đổi cách dữ liệu trông như thế nào, không phải ai có thể đọc nó. Bất kỳ ai cũng có thể giải mã ngay lập tức. Mật khẩu nên được hash bằng thuật toán mạnh, và bí mật nên được mã hóa.

Công cụ Base64 này có riêng tư không?

Có. Mã hóa và giải mã diễn ra hoàn toàn trong trình duyệt của bạn. Không có gì bạn nhập được tải lên hoặc gửi đến bất kỳ server nào, vì vậy dữ liệu của bạn ở lại trên thiết bị của bạn.

Sự khác biệt giữa mã hóa và giải mã là gì?

Mã hóa chuyển đổi văn bản gốc hoặc nhị phân thành chuỗi Base64. Giải mã đảo ngược điều đó, chuyển chuỗi Base64 trở lại thành các byte gốc chính xác. Chúng là các thao tác gương của nhau.