天天看點

window.btoa 和 window.atob

前一段時間被安全部門查出,明文傳遞密碼,被要求整改。

然後就進行了引入了第三方的base64編碼的js庫,進行了編碼然後傳遞。

其實在前端的加密都是尋求一個心理安慰,作用是微乎其微的,确實也更加好那麼一點。

今天在看

filer

 無意看到了 btoa和atob。

這不就是内置的base64編碼和解碼麼,那麼接下來有兩個問題 相容性和中文的支援情況

相容性

相容性IE10以上和其他浏覽器都支援,還是相對不錯的,要是移動端都支援。

借兩張 MDN的圖檔,要是真遇到IE怎麼辦,引入polyfill庫,引入第三方庫,或者直接不進行編碼。

window.btoa 和 window.atob
window.btoa 和 window.atob

 中文編碼

中文編碼一直都是程式員要關注的,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的地方優先喽。

window.btoa 和 window.atob

陰影:

WindowBase64 - Web API 接口 | MDN window.atob()與window.btoa()方法實作編碼與解碼 - 風雨後見彩虹 - 部落格園 Base64 encoding and decoding - Web APIs | MDN new Blob vs btoa

繼續閱讀