Whiz Tools

Bộ mã hóa/giải mã Base64

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

Sao chép

Bộ Mã Hóa và Giải Mã Base64

Giới thiệu

Base64 là một sơ đồ mã hóa nhị phân thành văn bản, đại diện cho dữ liệu nhị phân dưới dạng chuỗi ký tự ASCII. Nó được thiết kế để truyền tải dữ liệu được lưu trữ trong các định dạng nhị phân qua các kênh chỉ hỗ trợ nội dung văn bản một cách đáng tin cậy. Mã hóa Base64 chuyển đổi dữ liệu nhị phân thành một tập hợp 64 ký tự (do đó có tên gọi) có thể được truyền tải an toàn qua các giao thức dựa trên văn bản mà không bị hỏng dữ liệu.

Tập hợp ký tự Base64 bao gồm:

  • Các chữ cái hoa A-Z (26 ký tự)
  • Các chữ cái thường a-z (26 ký tự)
  • Các chữ số 0-9 (10 ký tự)
  • Hai ký tự bổ sung, thường là "+" và "/" (2 ký tự)

Công cụ này cho phép bạn dễ dàng mã hóa văn bản thành định dạng Base64 hoặc giải mã các chuỗi Base64 trở lại văn bản gốc của chúng. Nó đặc biệt hữu ích cho các nhà phát triển, chuyên gia CNTT và bất kỳ ai làm việc với dữ liệu cần được truyền tải an toàn qua các kênh dựa trên văn bản.

Cách Mã Hóa Base64 Hoạt Động

Quy trình mã hóa

Mã hóa Base64 hoạt động bằng cách chuyển đổi mỗi nhóm ba byte (24 bit) dữ liệu nhị phân thành bốn ký tự Base64. Quy trình theo các bước sau:

  1. Chuyển đổi văn bản đầu vào thành đại diện nhị phân của nó (sử dụng mã hóa ASCII hoặc UTF-8)
  2. Nhóm dữ liệu nhị phân thành các khối 24 bit (3 byte)
  3. Chia mỗi khối 24 bit thành bốn nhóm 6 bit
  4. Chuyển đổi mỗi nhóm 6 bit thành ký tự Base64 tương ứng

Khi chiều dài đầu vào không chia hết cho 3, sẽ có thêm ký tự "=" để duy trì tỷ lệ 4:3 giữa chiều dài đầu ra và đầu vào.

Biểu thức toán học

Đối với một chuỗi byte b1,b2,b3b_1, b_2, b_3, các ký tự Base64 tương ứng c1,c2,c3,c4c_1, c_2, c_3, c_4 được tính như sau:

c1=Base64[(b1>>2)]c_1 = \text{Base64}[(b_1 >> 2)] c2=Base64[((b1&3)<<4)(b2>>4)]c_2 = \text{Base64}[((b_1 \& 3) << 4) | (b_2 >> 4)] c3=Base64[((b2&15)<<2)(b3>>6)]c_3 = \text{Base64}[((b_2 \& 15) << 2) | (b_3 >> 6)] c4=Base64[(b3&63)]c_4 = \text{Base64}[(b_3 \& 63)]

Trong đó Base64[i]\text{Base64}[i] đại diện cho ký tự thứ ii trong bảng chữ cái Base64.

Quy trình giải mã

Giải mã Base64 đảo ngược quy trình mã hóa:

  1. Chuyển đổi mỗi ký tự Base64 thành giá trị 6 bit của nó
  2. Nối các giá trị 6 bit này lại với nhau
  3. Nhóm các bit thành các khối 8 bit (byte)
  4. Chuyển đổi mỗi byte thành ký tự tương ứng của nó

Đệm

Khi số byte cần mã hóa không chia hết cho 3, sẽ áp dụng đệm:

  • Nếu còn một byte, nó sẽ được chuyển đổi thành hai ký tự Base64 theo sau là "=="
  • Nếu còn hai byte, chúng sẽ được chuyển đổi thành ba ký tự Base64 theo sau là "="

Ví dụ

Hãy mã hóa văn bản "Hello" thành Base64:

  1. Đại diện ASCII của "Hello": 72 101 108 108 111
  2. Đại diện nhị phân: 01001000 01100101 01101100 01101100 01101111
  3. Nhóm thành các khối 6 bit: 010010 000110 010101 101100 011011 000110 1111
  4. Khối cuối cùng chỉ có 4 bit, vì vậy chúng ta thêm đệm bằng số 0: 010010 000110 010101 101100 011011 000110 111100
  5. Chuyển đổi sang thập phân: 18, 6, 21, 44, 27, 6, 60
  6. Tra cứu trong bảng chữ cái Base64: S, G, V, s, b, G, 8
  7. Kết quả là "SGVsbG8="

Lưu ý rằng có đệm "=" ở cuối vì chiều dài đầu vào (5 byte) không chia hết cho 3.

Công thức

Công thức tổng quát để tính chiều dài của chuỗi đã mã hóa Base64 là:

encoded_length=4×input_length3\text{encoded\_length} = 4 \times \lceil \frac{\text{input\_length}}{3} \rceil

Trong đó x\lceil x \rceil đại diện cho hàm trần (làm tròn lên số nguyên gần nhất).

Các trường hợp sử dụng

Mã hóa Base64 được sử dụng rộng rãi trong nhiều ứng dụng:

  1. Tệp đính kèm email: MIME (Mở rộng Thư điện tử Đa mục đích) sử dụng Base64 để mã hóa các tệp đính kèm nhị phân trong email.

  2. URL dữ liệu: Nhúng hình ảnh nhỏ, phông chữ hoặc các tài nguyên khác trực tiếp trong HTML, CSS hoặc JavaScript bằng cách sử dụng định dạng URL data:.

  3. Giao tiếp API: Truyền tải an toàn dữ liệu nhị phân trong các payload JSON hoặc các định dạng API dựa trên văn bản khác.

  4. Lưu trữ dữ liệu nhị phân trong các định dạng văn bản: Khi dữ liệu nhị phân cần được lưu trữ trong XML, JSON hoặc các định dạng dựa trên văn bản khác.

  5. Hệ thống xác thực: Xác thực cơ bản trong HTTP sử dụng mã hóa Base64 (mặc dù không phải để bảo mật, chỉ để mã hóa).

  6. Mật mã: Là một phần của các giao thức và hệ thống mật mã khác nhau, thường để mã hóa khóa hoặc chứng chỉ.

  7. Giá trị cookie: Mã hóa các cấu trúc dữ liệu phức tạp để lưu trữ trong cookie.

Các lựa chọn thay thế

Mặc dù Base64 được sử dụng rộng rãi, có những lựa chọn thay thế có thể phù hợp hơn trong một số tình huống:

  1. Base64 an toàn cho URL: Một biến thể sử dụng "-" và "_" thay cho "+" và "/" để tránh các vấn đề mã hóa URL. Hữu ích cho dữ liệu sẽ được bao gồm trong URL.

  2. Base32: Sử dụng tập hợp 32 ký tự, dẫn đến đầu ra dài hơn nhưng có tính đọc hiểu tốt hơn và không phân biệt chữ hoa chữ thường.

  3. Mã hóa Hex: Chuyển đổi đơn giản sang hệ thập lục phân, điều này ít hiệu quả hơn (gấp đôi kích thước) nhưng rất đơn giản và được hỗ trợ rộng rãi.

  4. Truyền tải nhị phân: Đối với các tệp lớn hoặc khi hiệu suất là rất quan trọng, các giao thức truyền tải nhị phân trực tiếp như HTTP với các tiêu đề Content-Type phù hợp là lựa chọn tốt hơn.

  5. Nén + Base64: Đối với dữ liệu văn bản lớn, nén trước khi mã hóa có thể giảm thiểu sự gia tăng kích thước.

  6. Tuân thủ JSON/XML: Đối với dữ liệu có cấu trúc, việc sử dụng mã hóa JSON hoặc XML gốc có thể phù hợp hơn là mã hóa Base64.

Lịch sử

Mã hóa Base64 có nguồn gốc từ các hệ thống máy tính và viễn thông sớm, nơi dữ liệu nhị phân cần được truyền tải qua các kênh được thiết kế cho văn bản.

Đặc tả chính thức của Base64 lần đầu tiên được công bố vào năm 1987 như một phần của RFC 989, định nghĩa Thư điện tử Bảo mật (PEM). Điều này sau đó đã được cập nhật trong RFC 1421 (1993) và RFC 2045 (1996, như một phần của MIME).

Thuật ngữ "Base64" xuất phát từ thực tế rằng mã hóa sử dụng 64 ký tự ASCII khác nhau để đại diện cho dữ liệu nhị phân. Sự lựa chọn 64 ký tự này là có chủ ý, vì 64 là một số mũ của 2 (2^6), điều này làm cho việc chuyển đổi giữa nhị phân và Base64 trở nên hiệu quả.

Theo thời gian, một số biến thể của Base64 đã xuất hiện:

  • Base64 tiêu chuẩn: Như được định nghĩa trong RFC 4648, sử dụng A-Z, a-z, 0-9, +, / và = cho việc đệm
  • Base64 an toàn cho URL: Sử dụng - và _ thay cho + và / để tránh các vấn đề mã hóa URL
  • Base64 an toàn cho tên tệp: Tương tự như Base64 an toàn cho URL, được thiết kế để sử dụng trong tên tệp
  • Base64 sửa đổi cho IMAP: Sử dụng trong giao thức IMAP với một tập hợp các ký tự đặc biệt khác

Mặc dù đã hơn ba thập kỷ tuổi, Base64 vẫn là một công cụ cơ bản trong máy tính hiện đại, đặc biệt với sự gia tăng của các ứng dụng web và API dựa nhiều vào các định dạng dữ liệu dựa trên văn bản như JSON.

Ví dụ mã

Dưới đây là các ví dụ về mã hóa và giải mã Base64 trong các ngôn ngữ lập trình khác nhau:

// Mã hóa/Giải mã Base64 trong JavaScript
function encodeToBase64(text) {
  return btoa(text);
}

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("Chuỗi Base64 không hợp lệ");
  }
}

// Ví dụ sử dụng
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("Mã hóa:", encoded);  // SGVsbG8sIFdvcmxkIQ==

try {
  const decoded = decodeFromBase64(encoded);
  console.log("Giải mã:", decoded);  // Hello, World!
} catch (error) {
  console.error(error.message);
}
# Mã hóa/Giải mã Base64 trong Python
import base64

def encode_to_base64(text):
    # Chuyển đổi chuỗi thành byte và sau đó mã hóa
    text_bytes = text.encode('utf-8')
    base64_bytes = base64.b64encode(text_bytes)
    return base64_bytes.decode('utf-8')

def decode_from_base64(base64_string):
    try:
        # Chuyển đổi chuỗi base64 thành byte và sau đó giải mã
        base64_bytes = base64_string.encode('utf-8')
        text_bytes = base64.b64decode(base64_bytes)
        return text_bytes.decode('utf-8')
    except Exception as e:
        raise ValueError(f"Chuỗi Base64 không hợp lệ: {e}")

# Ví dụ sử dụng
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
print(f"Mã hóa: {encoded}")  # SGVsbG8sIFdvcmxkIQ==

try:
    decoded = decode_from_base64(encoded)
    print(f"Giải mã: {decoded}")  # Hello, World!
except ValueError as e:
    print(e)
// Mã hóa/Giải mã Base64 trong Java
import java.util.Base64;
import java.nio.charset.StandardCharsets;

public class Base64Example {
    public static String encodeToBase64(String text) {
        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
        byte[] encodedBytes = Base64.getEncoder().encode(textBytes);
        return new String(encodedBytes, StandardCharsets.UTF_8);
    }
    
    public static String decodeFromBase64(String base64String) {
        try {
            byte[] base64Bytes = base64String.getBytes(StandardCharsets.UTF_8);
            byte[] decodedBytes = Base64.getDecoder().decode(base64Bytes);
            return new String(decodedBytes, StandardCharsets.UTF_8);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("Chuỗi Base64 không hợp lệ: " + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        String originalText = "Hello, World!";
        String encoded = encodeToBase64(originalText);
        System.out.println("Mã hóa: " + encoded);  // SGVsbG8sIFdvcmxkIQ==
        
        try {
            String decoded = decodeFromBase64(encoded);
            System.out.println("Giải mã: " + decoded);  // Hello, World!
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}
<?php
// Mã hóa/Giải mã Base64 trong PHP
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("Chuỗi Base64 không hợp lệ");
    }
    return $decoded;
}

// Ví dụ sử dụng
$originalText = "Hello, World!";
$encoded = encodeToBase64($originalText);
echo "Mã hóa: " . $encoded . "\n";  // SGVsbG8sIFdvcmxkIQ==

try {
    $decoded = decodeFromBase64($encoded);
    echo "Giải mã: " . $decoded . "\n";  // Hello, World!
} catch (Exception $e) {
    echo "Lỗi: " . $e->getMessage() . "\n";
}
?>
// Mã hóa/Giải mã Base64 trong C#
using System;
using System.Text;

class Base64Example
{
    public static string EncodeToBase64(string text)
    {
        byte[] textBytes = Encoding.UTF8.GetBytes(text);
        return Convert.ToBase64String(textBytes);
    }
    
    public static string DecodeFromBase64(string base64String)
    {
        try
        {
            byte[] base64Bytes = Convert.FromBase64String(base64String);
            return Encoding.UTF8.GetString(base64Bytes);
        }
        catch (FormatException)
        {
            throw new FormatException("Chuỗi Base64 không hợp lệ");
        }
    }
    
    static void Main()
    {
        string originalText = "Hello, World!";
        string encoded = EncodeToBase64(originalText);
        Console.WriteLine($"Mã hóa: {encoded}");  // SGVsbG8sIFdvcmxkIQ==
        
        try
        {
            string decoded = DecodeFromBase64(encoded);
            Console.WriteLine($"Giải mã: {decoded}");  // Hello, World!
        }
        catch (FormatException e)
        {
            Console.WriteLine($"Lỗi: {e.Message}");
        }
    }
}
# Mã hóa/Giải mã Base64 trong Ruby
require 'base64'

def encode_to_base64(text)
  Base64.strict_encode64(text)
end

def decode_from_base64(base64_string)
  begin
    Base64.strict_decode64(base64_string)
  rescue ArgumentError => e
    raise "Chuỗi Base64 không hợp lệ: #{e.message}"
  end
end

# Ví dụ sử dụng
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
puts "Mã hóa: #{encoded}"  # SGVsbG8sIFdvcmxkIQ==

begin
  decoded = decode_from_base64(encoded)
  puts "Giải mã: #{decoded}"  # Hello, World!
rescue StandardError => e
  puts "Lỗi: #{e.message}"
end
// Mã hóa/Giải mã Base64 trong Go
package main

import (
    "encoding/base64"
    "fmt"
)

func encodeToBase64(text string) string {
    return base64.StdEncoding.EncodeToString([]byte(text))
}

func decodeFromBase64(base64String string) (string, error) {
    bytes, err := base64.StdEncoding.DecodeString(base64String)
    if err != nil {
        return "", fmt.Errorf("chuỗi Base64 không hợp lệ: %v", err)
    }
    return string(bytes), nil
}

func main() {
    originalText := "Hello, World!"
    encoded := encodeToBase64(originalText)
    fmt.Println("Mã hóa:", encoded)  // SGVsbG8sIFdvcmxkIQ==
    
    decoded, err := decodeFromBase64(encoded)
    if err != nil {
        fmt.Println("Lỗi:", err)
    } else {
        fmt.Println("Giải mã:", decoded)  // Hello, World!
    }
}
// Mã hóa/Giải mã Base64 trong Swift
import Foundation

func encodeToBase64(_ text: String) -> String? {
    if let data = text.data(using: .utf8) {
        return data.base64EncodedString()
    }
    return nil
}

func decodeFromBase64(_ base64String: String) -> String? {
    if let data = Data(base64Encoded: base64String) {
        return String(data: data, encoding: .utf8)
    }
    return nil
}

// Ví dụ sử dụng
let originalText = "Hello, World!"
if let encoded = encodeToBase64(originalText) {
    print("Mã hóa: \(encoded)")  // SGVsbG8sIFdvcmxkIQ==
    
    if let decoded = decodeFromBase64(encoded) {
        print("Giải mã: \(decoded)")  // Hello, World!
    } else {
        print("Lỗi: Không thể giải mã chuỗi Base64")
    }
} else {
    print("Lỗi: Không thể mã hóa văn bản")
}
' Mã hóa/Giải mã Base64 trong Excel VBA
' Lưu ý: Điều này yêu cầu tham chiếu đến Microsoft XML, v6.0
Function EncodeToBase64(text As String) As String
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.nodeTypedValue = StrConv(text, vbFromUnicode)
    
    EncodeToBase64 = xmlNode.text
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
End Function

Function DecodeFromBase64(base64String As String) As String
    On Error GoTo ErrorHandler
    
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.text = base64String
    
    DecodeFromBase64 = StrConv(xmlNode.nodeTypedValue, vbUnicode)
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
    Exit Function
    
ErrorHandler:
    DecodeFromBase64 = "Lỗi: Chuỗi Base64 không hợp lệ"
End Function

' Sử dụng trong một trang tính:
' =EncodeToBase64("Hello, World!")
' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
# Mã hóa/Giải mã Base64 trong R
# Yêu cầu gói 'base64enc'
# install.packages("base64enc")
library(base64enc)

encode_to_base64 <- function(text) {
  # Chuyển đổi văn bản thành byte thô, sau đó mã hóa
  text_raw <- charToRaw(text)
  base64_encoded <- base64encode(text_raw)
  return(rawToChar(base64_encoded))
}

decode_from_base64 <- function(base64_string) {
  tryCatch({
    # Chuyển đổi chuỗi base64 thành byte thô, sau đó giải mã
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("Chuỗi Base64 không hợp lệ:", e$message))
  })
}

# Ví dụ sử dụng
original_text <- "Hello, World!"
encoded <- encode_to_base64(original_text)
cat("Mã hóa:", encoded, "\n")  # SGVsbG8sIFdvcmxkIQ==

tryCatch({
  decoded <- decode_from_base64(encoded)
  cat("Giải mã:", decoded, "\n")  # Hello, World!
}, error = function(e) {
  cat("Lỗi:", e$message, "\n")
})
% Mã hóa/Giải mã Base64 trong MATLAB
function demo_base64()
    originalText = 'Hello, World!';
    
    % Mã hóa
    encoded = encode_to_base64(originalText);
    fprintf('Mã hóa: %s\n', encoded);  % SGVsbG8sIFdvcmxkIQ==
    
    % Giải mã
    try
        decoded = decode_from_base64(encoded);
        fprintf('Giải mã: %s\n', decoded);  % Hello, World!
    catch e
        fprintf('Lỗi: %s\n', e.message);
    end
end

function encoded = encode_to_base64(text)
    % Chuyển đổi văn bản thành mảng uint8 và mã hóa
    bytes = uint8(text);
    encoded = base64encode(bytes);
end

function decoded = decode_from_base64(base64String)
    try
        % Giải mã chuỗi base64 thành mảng uint8
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('Chuỗi Base64 không hợp lệ');
    end
end
// Mã hóa/Giải mã Base64 trong C sử dụng OpenSSL
#include <stdio.h>
#include <string.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
#include <stdint.h>

char* encode_to_base64(const char* input) {
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    BIO_write(bio, input, strlen(input));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    
    char* result = (char*)malloc(bufferPtr->length + 1);
    memcpy(result, bufferPtr->data, bufferPtr->length);
    result[bufferPtr->length] = '\0';
    
    BIO_free_all(bio);
    
    return result;
}

char* decode_from_base64(const char* input) {
    BIO *bio, *b64;
    size_t length = strlen(input);
    char* buffer = (char*)malloc(length);
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new_mem_buf(input, -1);
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    int decoded_length = BIO_read(bio, buffer, length);
    
    if (decoded_length <= 0) {
        free(buffer);
        BIO_free_all(bio);
        return NULL; // Đầu vào Base64 không hợp lệ
    }
    
    buffer[decoded_length] = '\0';
    
    BIO_free_all(bio);
    
    return buffer;
}

int main() {
    const char* original_text = "Hello, World!";
    
    char* encoded = encode_to_base64(original_text);
    printf("Mã hóa: %s\n", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    char* decoded = decode_from_base64(encoded);
    if (decoded) {
        printf("Giải mã: %s\n", decoded);  // Hello, World!
        free(decoded);
    } else {
        printf("Lỗi: Chuỗi Base64 không hợp lệ\n");
    }
    
    free(encoded);
    
    return 0;
}
// Mã hóa/Giải mã Base64 trong Rust
use base64::{encode, decode};
use std::str;

fn encode_to_base64(text: &str) -> String {
    encode(text)
}

fn decode_from_base64(base64_string: &str) -> Result<String, String> {
    match decode(base64_string) {
        Ok(bytes) => {
            match str::from_utf8(&bytes) {
                Ok(text) => Ok(text.to_string()),
                Err(e) => Err(format!("Chuỗi UTF-8 không hợp lệ: {}", e))
            }
        },
        Err(e) => Err(format!("Chuỗi Base64 không hợp lệ: {}", e))
    }
}

fn main() {
    let original_text = "Hello, World!";
    let encoded = encode_to_base64(original_text);
    println!("Mã hóa: {}", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    match decode_from_base64(&encoded) {
        Ok(decoded) => println!("Giải mã: {}", decoded),  // Hello, World!
        Err(e) => println!("Lỗi: {}", e)
    }
}

Các trường hợp biên và xem xét

Khi làm việc với mã hóa và giải mã Base64, hãy lưu ý những điều quan trọng này:

  1. Ký tự Unicode và không phải ASCII: Khi mã hóa văn bản có ký tự không phải ASCII, hãy đảm bảo mã hóa ký tự thích hợp (thường là UTF-8) trước khi mã hóa Base64.

  2. Đệm: Base64 tiêu chuẩn sử dụng đệm bằng các ký tự "=" để đảm bảo chiều dài đầu ra là bội số của 4. Một số triển khai cho phép bỏ qua đệm, điều này có thể gây ra vấn đề tương thích.

  3. Ngắt dòng: Các triển khai Base64 truyền thống chèn ngắt dòng (thường là mỗi 76 ký tự) để dễ đọc, nhưng các ứng dụng hiện đại thường bỏ qua điều này.

  4. Base64 an toàn cho URL: Base64 tiêu chuẩn sử dụng các ký tự "+" và "/" có ý nghĩa đặc biệt trong URL. Đối với các ngữ cảnh URL, hãy sử dụng Base64 an toàn cho URL, thay thế các ký tự này bằng "-" và "_".

  5. Khoảng trắng: Khi giải mã, một số triển khai có thể khoan dung và bỏ qua khoảng trắng, trong khi những cái khác yêu cầu đầu vào chính xác.

  6. Tăng kích thước: Mã hóa Base64 làm tăng kích thước dữ liệu khoảng 33% (4 byte đầu ra cho mỗi 3 byte đầu vào).

  7. Hiệu suất: Mã hóa/giải mã Base64 có thể tốn nhiều tài nguyên tính toán cho dữ liệu rất lớn. Hãy xem xét các phương pháp truyền tải cho các tệp lớn.

Tài liệu tham khảo

  1. RFC 4648 - Các mã hóa dữ liệu Base16, Base32 và Base64
  2. RFC 2045 - MIME Phần Một: Định dạng của các thân tin nhắn Internet
  3. MDN Web Docs: Mã hóa và giải mã Base64
  4. Base64 - Wikipedia
  5. MIME - Wikipedia
Feedback