JavaScript Base64庫——Base64.js

一、什麼是Base64

Base64是將二進位數據編碼成ASCII字符集中可列印字元的一種方式。該編碼方式常用於在網路傳輸、電子郵件和其他文件中嵌入少量的二進位數據,如文件的圖像等。

Base64編碼不是加密演算法,它只是一種數據格式轉換的方式。加密演算法需要密鑰來解密。

二、Base64編碼原理

Base64編碼將三個8位的位元組(3*8=24 bits)轉換為四個6位的位元組(4*6=24 bits),每個6位的位元組再轉換成可列印的ASCII字元。因此,Base64編碼後的字元串長度會大於原來的字元串的長度。

編碼時,如果原始數據位數不足3的倍數,需要進行補齊。常用的補齊方法有兩種:

  • 末尾補零:將最後剩餘的一或兩個字元以0填充為6個二進位位,再進行轉換。
  • 末尾補等號:將最後剩餘的一或兩個字元以等號填充,即代表低位的二進位數為0。

三、Base64.js介紹

Base64.js是一個純JavaScript實現的Base64編碼/解碼庫,提供了Base64編碼解碼函數和URL、Data URI及MIME類型字元串的編碼解碼方法。

該庫使用了JavaScript的位運算、索引、按位操作等特性,不依賴任何外部庫。

export const Base64 = {
    keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
    encode(input) {
        let output = '';
        let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        let i = 0;
        input = Base64.utf8Encode(input);
        while (i > 2;
            enc2 = ((chr1 & 3) <> 4);
            enc3 = ((chr2 & 15) <> 6);
            enc4 = chr3 & 63;
            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }
            output = output +
                Base64.keyStr.charAt(enc1) + Base64.keyStr.charAt(enc2) +
                Base64.keyStr.charAt(enc3) + Base64.keyStr.charAt(enc4);
        }
        return output;
    },
    decode(input) {
        let output = '';
        let chr1, chr2, chr3;
        let enc1, enc2, enc3, enc4;
        let i = 0;
        input = input.replace(/[^A-Za-z0-9+/=]/g, '');
        while (i < input.length) {
            enc1 = Base64.keyStr.indexOf(input.charAt(i++));
            enc2 = Base64.keyStr.indexOf(input.charAt(i++));
            enc3 = Base64.keyStr.indexOf(input.charAt(i++));
            enc4 = Base64.keyStr.indexOf(input.charAt(i++));
            chr1 = (enc1 <> 4);
            chr2 = ((enc2 & 15) <> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
            output = output + String.fromCharCode(chr1);
            if (enc3 !== 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 !== 64) {
                output = output + String.fromCharCode(chr3);
            }
        }
        output = Base64.utf8Decode(output);
        return output;
    },
    utf8Encode(string) {
        string = string.replace(/\r\n/g, '\n');
        let utfString = '';
        for (let i = 0; i < string.length; i++) {
            let c = string.charCodeAt(i);
            if (c  127) && (c > 6) | 192);
                utfString += String.fromCharCode((c & 63) | 128);
            } else {
                utfString += String.fromCharCode((c >> 12) | 224);
                utfString += String.fromCharCode(((c >> 6) & 63) | 128);
                utfString += String.fromCharCode((c & 63) | 128);
            }
        }
        return utfString;
    },
    utf8Decode(utfString) {
        let string = '';
        let i = 0;
        let c = 0;
        let c2 = 0;
        let c3 = 0;
        while (i < utfString.length) {
            c = utfString.charCodeAt(i);
            if (c  191) && (c < 224)) {
                c2 = utfString.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            } else {
                c2 = utfString.charCodeAt(i + 1);
                c3 = utfString.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
        }
        return string;
    }
};

四、Base64.js編碼/解碼示例

Base64.js提供了Base64編碼/解碼的函數,使用方法如下:

var encodedString = Base64.encode('hello world');// aGVsbG8gd29ybGQ=
var decodedString = Base64.decode(encodedString);// hello world

五、Base64.js URL編碼/解碼示例

Base64.js提供了對URL編碼的支持,使用方法如下:

var encodedUrl = Base64.urlEncode('https://example.com?a=b&c=d');// aHR0cHM6Ly9leGFtcGxlLmNvbTphPWImYz1k
var decodedUrl = Base64.urlDecode(encodedUrl);// https://example.com?a=b&c=d

六、Base64.js Data URI編碼/解碼示例

Base64.js提供了Data URI編碼的支持,使用方法如下:

// 編碼
var dataURI = 'data:image/png;base64,' + Base64.encode(file);
// 解碼
var fileData = Base64.decode(dataURI.replace(/^data:[\w\/]+;base64,/, ''));

七、Base64.js MIME類型編碼/解碼示例

Base64.js提供了MIME類型編碼的支持,使用方法如下:

// 編碼
var data = 'Test';
var mimeType = 'text/plain';
var encodedMime = 'data:' + mimeType + ';base64,' + Base64.encode(data);
// 解碼
var decodedData = Base64.decode(encodedMime.split(',')[1]);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185841.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 21:07
下一篇 2024-11-26 21:07

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字元串。下面我們來詳細了…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27

發表回復

登錄後才能評論