CoderTools

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

Mã hóa và giải mã chuỗi Base64 nhanh chóng, hỗ trợ chuyển đổi cả văn bản và tệp

Bộ ký tự

Base64 là gì?

Base64 là một phương pháp mã hóa biểu diễn dữ liệu nhị phân bằng 64 ký tự ASCII có thể in được. Các ký tự này bao gồm chữ hoa, chữ thường, số và một số ký hiệu đặc biệt. Base64 được sử dụng rộng rãi trong các trường hợp cần truyền tải dữ liệu nhị phân qua các kênh chỉ hỗ trợ văn bản, chẳng hạn như tệp đính kèm email và tham số URL. Phương pháp mã hóa Base64 ban đầu được định nghĩa trong RFC 4648đặc tả MIME (RFC 2045).

Nguyên lý thuật toán mã hóa Base64:

Quá trình mã hóa Base64 có thể được chia thành các bước sau:

  1. Chia dữ liệu đầu vào thành các nhóm, mỗi nhóm 3 byte
  2. Sắp xếp lại 3 byte này (24 bit) thành 4 nhóm, mỗi nhóm 6 bit
  3. Ánh xạ mỗi giá trị 6 bit (phạm vi 0-63) làm chỉ số cho bảng ký tự Base64
  4. Nếu nhóm cuối cùng có ít hơn 3 byte, điền thêm bit 0 và thêm số lượng dấu bằng (=) tương ứng làm padding ở cuối kết quả

Bảng ký tự Base64: A-Z, a-z, 0-9, +, /

Ký tự padding: =

Ví dụ chuyển đổi:

Mã ASCII của văn bản "Man": 77 97 110
Biểu diễn nhị phân: 01001101 01100001 01101110
Nhóm lại thành 6 bit: 010011 010110 000101 101110
Giá trị thập phân: 19 22 5 46
Kết quả Base64: T W F u

Cách triển khai đơn giản bằng JavaScript:

// Base64 encoding implementation example (simplified)
function base64Encode(str) {
    // Base64 character set
    const base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    let result = '';
    let i = 0;

    // Process every 3 characters as a group
    while (i < str.length) {
        const char1 = str.charCodeAt(i++);
        const char2 = i < str.length ? str.charCodeAt(i++) : 0;
        const char3 = i < str.length ? str.charCodeAt(i++) : 0;
        
        // Convert 3 8-bit bytes into 4 6-bit indices
        const triplet = (char1 << 16) + (char2 << 8) + char3;
        
        // Extract 4 6-bit values from the triplet
        const index1 = (triplet >> 18) & 0x3F;
        const index2 = (triplet >> 12) & 0x3F;
        const index3 = (triplet >> 6) & 0x3F;
        const index4 = triplet & 0x3F;
        
        // Add padding based on the original data length
        if (i - 3 > str.length) {
            result += base64chars[index1] + base64chars[index2] + '==';
        } else if (i - 2 > str.length) {
            result += base64chars[index1] + base64chars[index2] + base64chars[index3] + '=';
        } else {
            result += base64chars[index1] + base64chars[index2] + base64chars[index3] + base64chars[index4];
        }
    }
  
    return result;
}

Ứng dụng phổ biến:

  • Mã hóa tệp đính kèm email (chuẩn MIME)
  • Truyền tải dữ liệu an toàn trong URL (sử dụng biến thể Base64url, trong đó '+' và '/' được thay thế bằng '-' và '_')
  • Nhúng hình ảnh nhị phân trong HTML hoặc CSS (data URI scheme)
  • Lưu trữ dữ liệu đơn giản dưới dạng một chuỗi (chẳng hạn như các thành phần JWT token)
  • Bao gồm dữ liệu nhị phân trong XML và JSON (tránh vấn đề escape ký tự đặc biệt)

Tính năng nâng cao

Hỗ trợ định dạng Hex

Công cụ của chúng tôi hỗ trợ đầu vào và đầu ra định dạng hex, hữu ích cho các lập trình viên làm việc với dữ liệu nhị phân trong mã chương trình.

  • Đầu vào: Chấp nhận định dạng hex như 0x11,0x22,0x33 hoặc đơn giản 112233
  • Đầu ra: Chuyển đổi Base64 đã giải mã trở lại thành định dạng hex để nhúng vào mã

Hỗ trợ bộ ký tự

Các bộ ký tự khác nhau mã hóa văn bản thành byte khác nhau. Công cụ của chúng tôi hỗ trợ nhiều bộ ký tự để xử lý các mã hóa văn bản khác nhau:

  • UTF-8: Mã hóa phổ quát hỗ trợ tất cả ký tự Unicode (mặc định)
  • ASCII: Mã hóa 7-bit hỗ trợ ký tự tiếng Anh cơ bản (0-127)
  • Latin-1 (ISO-8859-1): Mã hóa 8-bit hỗ trợ ký tự Tây Âu (ISO-8859-1)
  • UTF-16: Mã hóa 16-bit thường được sử dụng bởi Windows và Java (Little Endian)

Lưu ý quan trọng:

  • Dữ liệu được mã hóa Base64 thường lớn hơn khoảng 33% so với dữ liệu gốc (vì 3 byte trở thành 4 ký tự)
  • Base64 không phải là thuật toán mã hóa, chỉ là phương pháp mã hóa, và không cung cấp bảo mật
  • Mã hóa Base64 của các tệp tin lớn có thể tiêu tốn nhiều bộ nhớ và thời gian xử lý
  • Các biến thể Base64 an toàn cho URL sử dụng bảng ký tự khác nhau để tránh vấn đề mã hóa URL
  • Base64 chuẩn có thể bao gồm ngắt dòng để giới hạn độ dài dòng, điều này yêu cầu xử lý bổ sung trong một số ứng dụng

So sánh Base64 với các mã hóa khác:

Loại mã hóa Đặc điểm Ứng dụng chính
Base64 Sử dụng 64 ký tự ASCII để biểu diễn dữ liệu nhị phân Tệp đính kèm email, truyền tải dữ liệu nhị phân trong văn bản
Mã hóa URL Chuyển đổi ký tự đặc biệt sang định dạng %XX Truyền tham số URL, gửi biểu mẫu
Mã hóa Hex Mỗi byte được biểu diễn bằng hai ký tự hex Biểu diễn giá trị hash, trực quan hóa dữ liệu nhị phân

Để biết thêm thông tin chính thức về Base64, vui lòng tham khảo các tài nguyên sau: RFC 4648 (Chuẩn Base64) | Wikipedia: Base64 | RFC 2045 (Đặc tả MIME)