atob和btoa的趣談

不瞭解的人忽然看到window對象的atob和btoa 函數,估計會認爲哪一個臭小子添加全局函數了。javascript

你若是告訴他這是原生函數,他必定會怒罵:哪一個腦殘給api起個這樣的名子。java

你能猜出來這兩個函數是幹什麼的嗎?api

實驗一下:安全

直觀看有這幾點:函數

  1. 「123」 通過  atob 變短了,  結過btoa 變長了 。
  2. 先atob 後btoa,字符變了 。 可是先btoa,後atob,字符不變。

奇怪嗎,根本不奇怪,解釋一下它們的用途就明白了。編碼

引用MDN:加密

Base64是一組類似的二進制到文本(binary-to-text)的編碼規則,使得二進制數據在解釋成radix-64的表現形式後可以用ASCII字符串的格式表示出來。code

atob() 函數可以解碼經過base-64編碼的字符串數據。相反地,btoa() 函數可以從字符串或二進制數據建立一個base-64編碼的ASCII字符串。對象

簡單一句:Base64編碼將數據轉爲「安全字符」用於傳輸,編碼會使內容變長1/3!blog

btoa就是進行Base64編碼,atob是解碼。

有問題就是:它不支持Utf-8中的全部字符,會有異常。解決方案:

https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

但我試驗更簡單的是:

unescape(atob( // 解碼
               btoa( escape( "12中國✓ à la mode"))  // 編碼
         )     )

 

我如今決定在項目裏,用它們來加密,解密存入localStorage中的字符串了。

安全嗎 ?知道了確定不安全,但只要別人看一眼是亂碼就OK了。

相關文章
相關標籤/搜索