涉及內容:

編碼解碼 Encoding & Decoding

加密解密 Encryption & Decryption

數字簽名 Digital Signature

壓縮與解壓縮 Compression & Decompression

序列化 Serialization

哈希 Hash

字符集 Charset

對稱加密

原理:使用密鑰和加密演算法對數據進行轉換,得到的無意義數據即為密文;使用密鑰和解密演算法對密文進行逆向轉換,得到原數據.

經典演算法:DES,AES

非對稱加密

原理:使用公鑰對數據進行加密得到密文;使用私鑰對數據進行解密得到原數據

延伸用途: 數字簽名經典演算法:RSA,DSA

數字簽名

如上圖,其實並不能驗證公鑰解密後的數據就是私鑰簽名後的原數據,所以保險起見還可以用下面一種方式進行簽名和驗證

加密+簽名,用來更加安全的數據傳輸

編碼

Base64

  • 將二進位數據轉換成由64個字元組成的字元串的編碼演算法通常asc2編碼中8位為一個符號,但是base64為了字元一定是字元,所有每6位對應一個字元.
  • 什麼是二進位數據?非文本數據就是二進位數據
  • 用途
    • 讓原數據具有字元串所具有的特性,如可以放在URL中傳輸,可以保存到文本文件,可以通過普通的聊天軟體進行文本傳輸.
    • 把原本人眼可以讀懂的字元串變成讀不懂的字元串,降低偷窺風險*變種: Base58

URL encoding

  • 將URL中的保留字元使用百分號"%"進行編碼
  • 目的:消除歧義,避免解析錯誤
  • http://hencoder.com/user/?name=隱匿&偉大 ->http://hencoder.com/user/?name=隱匿%26偉大

壓縮與解壓縮

  • 壓縮: 把數據換一種方式來存儲,以減小存儲空間
  • 解壓縮: 把壓縮後的數據還原成原先的形式,以便使用
  • 常見的壓縮演算法: DELETE,JPEG,MP3

序列化

  • 序列化: 把數據對象(一般是內存中的,例如JVM中的對象)轉換成位元組序列的過程
  • 反序列化: 把位元組序列重新轉換成內存中的對象
  • 目的:讓內存中的對象可以被存儲和傳輸

Hash

  • 定義: 把任意數據轉換成指定大小範圍(通常很小)的數據
  • 作用:摘要,數字指紋
  • 經典演算法:MD5, SHA1, SHA256等
  • 實際用途:
    • 數據完整性驗證
    • 快速查找:hashCode()和HashMap
    • 隱私保護

Hash是加密嗎?據說MD5是不可逆加密?

不是加密,因為沒有解密.

最終通過學習hash過程後的簽名驗證流程

字符集

  • 含義:一個由整數向現實世界中的文字元號的Map
  • 分之
    • ASC2: 128 個字元,1位元組
    • ISO-8859-1: 對ASC2進行擴充,1位元組
    • Unicode: 13萬個字元,多位元組
      • UTF-8 : Unicode的編碼分支
      • UTF-16 : Unicode的編碼分支

    • GBK/GB2312/GB18030: 中國自研標準,多位元組,字符集+編碼

自己是從事了七年開發的Android工程師,不少人私下問我,2019年Android進階該怎麼學,方法有沒有?

沒錯,年初我花了一個多月的時間整理出來的學習資料,希望能幫助那些想進階提升Android開發,卻又不知道怎麼進階學習的朋友。【包括高級UI、性能優化、架構師課程、NDK、Kotlin、混合式開發(ReactNative+Weex)、Flutter等架構技術資料】,希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。

喜歡我的文章可以點贊+關注我的【個人主頁】獲取免費資料,後續我將繼續分享更多Android技術乾貨,感謝支持!

資料大全

推薦閱讀:
相關文章