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
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"]function b64EncodeUnicode[str] { return btoa[encodeURIComponent[str]]; } function UnicodeDecodeB64[str] { return decodeURIComponent[atob[str]]; } b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl" UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
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 4Ghi 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 byteMỗ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ácfunction 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"
0function b64EncodeUnicode[str] {
return btoa[encodeURIComponent[str]];
}
function UnicodeDecodeB64[str] {
return decodeURIComponent[atob[str]];
}
b64EncodeUnicode["✓ à la mode"]; // "JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"
UnicodeDecodeB64["JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"]; // "✓ à la mode"
1Hà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"
2Ghi 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]