Mã hóa base64 được thực hiện như thế nào?

Base64 là một nhóm các sơ đồ mã hóa nhị phân thành văn bản tương tự biểu thị dữ liệu nhị phân ở định dạng chuỗi ASCII bằng cách dịch nó thành biểu diễn cơ số 64. Thuật ngữ Base64 bắt nguồn từ một cụ thể

Các lược đồ mã hóa Base64 thường được sử dụng khi có nhu cầu mã hóa dữ liệu nhị phân cần được lưu trữ và truyền qua phương tiện được thiết kế để xử lý ASCII. Điều này là để đảm bảo rằng dữ liệu vẫn còn nguyên vẹn mà không bị sửa đổi trong quá trình vận chuyển. Base64 thường được sử dụng trong một số ứng dụng bao gồm email qua MIME và lưu trữ dữ liệu phức tạp trong XML

Một ứng dụng phổ biến của mã hóa Base64 trên web là mã hóa dữ liệu nhị phân để có thể đưa vào dữ liệu. URL

Trong JavaScript có hai hàm tương ứng để giải mã và mã hóa chuỗi Base64

  • function b64EncodeUnicode[str] {
      return btoa[encodeURIComponent[str]];
    }
    
    function UnicodeDecodeB64[str] {
      return decodeURIComponent[atob[str]];
    }
    
    b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
    UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
    
    0. tạo chuỗi ASCII được mã hóa Base64 từ một "chuỗi" dữ liệu nhị phân ["btoa" nên được đọc là "nhị phân sang ASCII"]
  • function b64EncodeUnicode[str] {
      return btoa[encodeURIComponent[str]];
    }
    
    function UnicodeDecodeB64[str] {
      return decodeURIComponent[atob[str]];
    }
    
    b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
    UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
    
    1. giải mã một chuỗi được mã hóa Base64 ["atob" nên được đọc là "ASCII sang nhị phân"]

Thuật toán được sử dụng bởi

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
1 và
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
0 được chỉ định trong RFC 4648, phần 4

Ghi chú.

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
0 dự kiến ​​sẽ được truyền dữ liệu nhị phân và sẽ đưa ra một ngoại lệ nếu chuỗi đã cho chứa bất kỳ ký tự nào có biểu diễn UTF-16 chiếm nhiều hơn một byte

Mỗi chữ số Base64 đại diện cho chính xác 6 bit dữ liệu. Vì vậy, ba byte 8 bit của chuỗi đầu vào/tệp nhị phân [3 × 8 bit = 24 bit] có thể được biểu thị bằng bốn chữ số Base64 6 bit [4 × 6 = 24 bit]

Điều này có nghĩa là phiên bản Base64 của một chuỗi hoặc tệp sẽ có ít nhất 133% kích thước của nguồn [tăng ~33%]. Mức tăng có thể lớn hơn nếu dữ liệu được mã hóa nhỏ. Ví dụ: chuỗi

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
0 với
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
1 được mã hóa thành
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
2 với
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
3 - tăng 300%

Vì các chuỗi JavaScript là các chuỗi được mã hóa 16-bit, nên trong hầu hết các trình duyệt, việc gọi

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
4 trên chuỗi Unicode sẽ gây ra ngoại lệ
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
5 nếu một ký tự vượt quá phạm vi của ký tự được mã hóa ASCII 8-bit. Có hai phương pháp có thể để giải quyết vấn đề này

  • cách đầu tiên là thoát toàn bộ chuỗi và sau đó mã hóa nó;
  • cách thứ hai là chuyển đổi chuỗi UTF-16 thành một mảng ký tự UTF-8 rồi mã hóa nó

Đây là hai phương pháp có thể

function utf8_to_b64[str] {
  return window.btoa[unescape[encodeURIComponent[str]]];
}

function b64_to_utf8[str] {
  return decodeURIComponent[escape[window.atob[str]]];
}

// Usage:
utf8_to_b64["✓ à la mode"]; // "4pyTIMOgIGxhIG1vZGU="
b64_to_utf8["4pyTIMOgIGxhIG1vZGU="]; // "✓ à la mode"

Giải pháp này đã được đề xuất bởi Johan Sundström

Một giải pháp khả thi khác mà không cần sử dụng các hàm 'unescape' và 'escape' hiện không dùng nữa. Tuy nhiên, giải pháp thay thế này không thực hiện mã hóa base64 của chuỗi đầu vào. Lưu ý sự khác biệt trong kết quả đầu ra của

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
6 và
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
7. Việc áp dụng giải pháp thay thế này có thể dẫn đến các vấn đề về khả năng tương tác với các ứng dụng khác

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"

Ghi chú. Đoạn mã sau cũng hữu ích để lấy ArrayBuffer từ chuỗi Base64 và/hoặc ngược lại []

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
0

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
1

Hàm này cho phép chúng tôi tạo uint8Arrays hoặc ArrayBuffers từ các chuỗi được mã hóa Base64

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
2

Ghi chú. Hàm

function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
01 trả về một
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
02 byte. Nếu mục đích của bạn là tạo bộ đệm dữ liệu thô 16-bit/32-bit/64-bit, hãy sử dụng đối số
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
03, là số byte mà thuộc tính
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
04 phải tạo ra bội số [
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
05 hoặc bỏ qua đối với ASCII, . e. , một chuỗi trong đó mỗi ký tự trong chuỗi được coi là một byte dữ liệu nhị phân] hoặc chuỗi được mã hóa UTF-8,
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
06 đối với chuỗi UTF-16,
function b64EncodeUnicode[str] {
  return btoa[encodeURIComponent[str]];
}

function UnicodeDecodeB64[str] {
  return decodeURIComponent[atob[str]];
}

b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
07 đối với chuỗi UTF-32]

Mã hóa Base64 như thế nào?

Về cơ bản, Base64 được sử dụng để mã hóa dữ liệu nhị phân dưới dạng văn bản có thể in được . Điều này cho phép bạn vận chuyển nhị phân qua các giao thức hoặc phương tiện không thể xử lý các định dạng dữ liệu nhị phân và yêu cầu văn bản đơn giản. [ Tải ngay. Hướng dẫn của quản trị viên hệ thống về Bash scripting. ] Base64 sử dụng các ký tự 6 bit được nhóm thành chuỗi 24 bit.

Mã hóa và giải mã Base64 hoạt động như thế nào?

Techopedia giải thích về Base64 . Dữ liệu mới tạo được biểu diễn trong hệ thống số 64 cơ số và dưới dạng văn bản ASCII 7 bit. Bởi vì mỗi bit được chia thành hai bit, dữ liệu được chuyển đổi lớn hơn 33 phần trăm hoặc một phần ba so với dữ liệu gốc. by dividing every three bits of binary data into six bit units. The newly created data is represented in a 64-radix numeral system and as seven-bit ASCII text. Because each bit is divided into two bits, the converted data is 33 percent, or one-third, larger than the original data.

Làm cách nào để mã hóa tệp thành Base64?

Mã hóa tệp thành Base64 trực tuyến và nhúng tệp vào bất kỳ tài liệu văn bản nào như HTML, JSON hoặc XML. .
Chọn một tệp cục bộ từ máy tính của bạn
Nếu cần, hãy chọn định dạng đầu ra mong muốn
Nhấn nút “Mã hóa tệp thành Base64”
Tải xuống hoặc sao chép kết quả từ trường “Base64”

Ví dụ mã hóa Base64 là gì?

Ví dụ mã hóa Base64 . 100110 111010 001011 101001. Mỗi nhóm này chuyển thành các số 38, 58, 11 và 41

Chủ Đề