關於base64編碼的原理及實現

2021-09-16 20:15:32 字數 1533 閱讀 6719

但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。

【base64】

-base64的編碼都是按字串長度,以每3個8bit的字元為一組,

-然後針對每組,首先獲取每個字元的ascii編碼,

-然後將ascii編碼轉換成8bit的二進位制,得到一組3*8=24bit的位元組

-然後再將這24bit劃分為4個6bit的位元組,並在每個6bit的位元組前面都填兩個高位0,得到4個8bit的位元組

-然後將這4個8bit的位元組轉換成10進製,對照base64編碼表 (下表),得到對應編碼後的字元。

(注:1. 要求被編碼字元是8bit的,所以須在ascii編碼範圍內,u0000-u00ff,中文就不行。

2. 如果被編碼字元長度不是3的倍數的時候,則都用0代替,對應的輸出字元為=)

由於lucy只有4個字母,所以按3個一組的話,第二組還有兩個空位,所以需要用0來補齊。這裡就需要注意,因為是需要補齊而出現的0,所以轉化成十進位制的時候就不能按常規用base64編碼表來對應,所以不是a, 可以理解成為一種特殊的「異常」,編碼應該對應「=」。

有了上面的理論,那我們實現乙個base64編碼就容易了。

/**

* base64 encoding & decoding

* for fixing browsers which don't support base64 | btoa |atob

*/(function (win, undefined)

var i = 0,

prev,

ascii,

mod,

result = ;

while (i < s.length)

prev = ascii;

i ++;

}// 迴圈結束後看mod, 為0 證明需補3個6位,第乙個為最後乙個8位的最後兩位後面補4個0。另外兩個6位對應的是異常的「=」;

// mod為1,證明還需補兩個6位,乙個是最後乙個8位的後4位補兩個0,另乙個對應異常的「=」

if(mod == 0) else if (mod == 1)

return result.join('');

}// atob method

// 逆轉encode的思路即可

function _atob (s)

prev = cur;

i ++;

}return result.join('');

}return ;

}();

if (!win.base64)

if (!win.btoa)

if (!win.atob)

})(window)

關於base64編碼的原理及實現

但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...

關於base64編碼的原理及實現

但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...

關於base64編碼的原理及實現

但是處於好奇心,還是驅使我去了解下base64編碼的原理。以便也在不支援原生base64編碼的ie下可以得以實現。base64 base64的編碼都是按字串長度,以每3個8bit的字元為一組,然後針對每組,首先獲取每個字元的ascii編碼,然後將ascii編碼轉換成8bit的二進位制,得到一組3 8...