涉及內(nèi)容:
編碼解碼 Encoding & Decoding
加密解密 Encryption & Decryption
數(shù)字簽名 Digital Signature
壓縮與解壓縮 Compression & Decompression
序列化 Serialization
哈希 Hash
字符集 Charset
對稱加密
image.png
原理:使用密鑰和加密算法對數(shù)據(jù)進行轉(zhuǎn)換,得到的無意義數(shù)據(jù)即為密文碎罚;使用密鑰和解密算法對密文進行逆向轉(zhuǎn)換,得到原數(shù)據(jù).
經(jīng)典算法:DES,AES
非對稱加密
原理:使用公鑰對數(shù)據(jù)進行加密得到密文;使用私鑰對數(shù)據(jù)進行解密得到原數(shù)據(jù)
延伸用途: 數(shù)字簽名
經(jīng)典算法:RSA,DSA
image.png
數(shù)字簽名
image.png
如上圖,其實并不能驗證公鑰解密后的數(shù)據(jù)就是私鑰簽名后的原數(shù)據(jù),所以保險起見還可以用下面一種方式進行簽名和驗證
image.png
加密+簽名笆豁,用來更加安全的數(shù)據(jù)傳輸
image.png
編碼
Base64
- 將二進制數(shù)據(jù)轉(zhuǎn)換成由64個字符組成的字符串的編碼算法
通常asc2編碼中8位為一個符號,但是base64為了字符一定是字符,所有每6位對應一個字符. - 什么是二進制數(shù)據(jù)?
非文本數(shù)據(jù)就是二進制數(shù)據(jù) - 用途
- 讓原數(shù)據(jù)具有字符串所具有的特性闯狱,如可以放在URL中傳輸煞赢,可以保存到文本文件,可以通過普通的聊天軟件進行文本傳輸.
- 把原本人眼可以讀懂的字符串變成讀不懂的字符串哄孤,降低偷窺風險
*變種: Base58
URL encoding
- 將URL中的保留字符使用百分號"%"進行編碼
- 目的:消除歧義耕驰,避免解析錯誤
-
http://hencoder.com/user/?name=隱匿&偉大 ->
http://hencoder.com/user/?name=隱匿%26偉大
壓縮與解壓縮
- 壓縮: 把數(shù)據(jù)換一種方式來存儲,以減小存儲空間
- 解壓縮: 把壓縮后的數(shù)據(jù)還原成原先的形式录豺,以便使用
- 常見的壓縮算法: DELETE,JPEG,MP3
序列化
- 序列化: 把數(shù)據(jù)對象(一般是內(nèi)存中的朦肘,例如JVM中的對象)轉(zhuǎn)換成字節(jié)序列的過程
- 反序列化: 把字節(jié)序列重新轉(zhuǎn)換成內(nèi)存中的對象
- 目的:讓內(nèi)存中的對象可以被存儲和傳輸
Hash
- 定義: 把任意數(shù)據(jù)轉(zhuǎn)換成指定大小范圍(通常很小)的數(shù)據(jù)
- 作用:摘要,數(shù)字指紋
- 經(jīng)典算法:MD5, SHA1, SHA256等
- 實際用途:
- 數(shù)據(jù)完整性驗證
- 快速查找:hashCode()和HashMap
- 隱私保護
Hash是加密嗎双饥?據(jù)說MD5是不可逆加密媒抠?
不是加密,因為沒有解密.
最終通過學習hash過程后的簽名驗證流程
image.png
字符集
- 含義:一個由整數(shù)向現(xiàn)實世界中的文字符號的Map
- 分之
- ASC2: 128 個字符咏花,1字節(jié)
- ISO-8859-1: 對ASC2進行擴充趴生,1字節(jié)
- Unicode: 13萬個字符,多字節(jié)
- UTF-8 : Unicode的編碼分支
- UTF-16 : Unicode的編碼分支
- GBK/GB2312/GB18030: 中國自研標準昏翰,多字節(jié)苍匆,字符集+編碼