前一段時間被安全部門查出,明文傳遞密碼,被要求整改。
然後就進行了引入了第三方的base64編碼的js庫,進行了編碼然後傳遞。
其實在前端的加密都是尋求一個心理安慰,作用是微乎其微的,确實也更加好那麼一點。
今天在看
filer無意看到了 btoa和atob。
這不就是内置的base64編碼和解碼麼,那麼接下來有兩個問題 相容性和中文的支援情況
相容性
相容性IE10以上和其他浏覽器都支援,還是相對不錯的,要是移動端都支援。
借兩張 MDN的圖檔,要是真遇到IE怎麼辦,引入polyfill庫,引入第三方庫,或者直接不進行編碼。

中文編碼
中文編碼一直都是程式員要關注的,window.btoa('哎喲不錯'),是會抛出異常的。
那麼一般的思想都是先借用encodeURIComponent進行base64編碼,
然後借用decodeURIComponent進行base64解碼。
後看到MDN的備注,
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"
//譯者注:在js引擎内部,encodeURIComponent(str)相當于escape(unicodeToUTF8(str))
//是以可以推導出unicodeToUTF8(str)等同于unescape(encodeURIComponent(str))
兩者的問題都解決了,那麼到了引用場景了。
簡單的加密解密,,對于Html5 Api中出現的如FileReader Api, 拖拽上傳,甚至是Canvas,Video截圖都可以實作。
URL.createObjectURL也可以生成base64格式的東西,關鍵在于性能,借用别人的截圖。這說明個啥,能用btoa的地方優先喽。
陰影:
WindowBase64 - Web API 接口 | MDN window.atob()與window.btoa()方法實作編碼與解碼 - 風雨後見彩虹 - 部落格園 Base64 encoding and decoding - Web APIs | MDN new Blob vs btoa