HenCoder Plus L02—— 编码、加密、Hash
為什么要講這些東西?
因為這些東西經常會被用到,但需要真正理解才能正確使用
相關詞: MD5、SHA1、RSA、DSA、AES、BASE64、encodedURL、Unicode、UTF-8、GBK、IOS-8859-1…
密碼學
起源:古代戰爭
移位式加密:密碼棒
具備密碼學的兩個要素
加密算法:纏木棍后橫著寫
密鑰:木棍的規格
替換式加密
加密算法:替換
密鑰:碼表
現代密碼學
不僅可以用于文字加密,還可以用于二進制內容加密。
對于計算機非常有用,因為計算機的通信是喊話式的。
對稱加密
非對稱加密
對稱加密
原理:使用密鑰和加密算法對數據進 轉換,得到的無意義數據即為密文;使用 密鑰和解密算法對密文進行逆向轉換,得到原數據。
經典算法:DES(因密鑰太短被棄用),AES
什么是對稱加密的密鑰破解。關鍵是拿到原文和密文之后。算出來密鑰。最優的加密算法的破解方法是窮舉法。
非對稱加密 重點內容
原理:使用公鑰加密得到密文,使用私鑰解密得到源數據。
場景
RSA 算法是比較簡單的非對稱加密算法。但是還是比較復雜
延伸用途 : 簽名和驗證
公鑰能不能解私鑰呢?
比特幣 橢圓曲線算法 ECDSA (公鑰就是依靠私鑰算出來的)
經典算法:RSA、DSA(專門用來簽名和驗證)
破解思路 拿到公鑰之后,可以算出私鑰就成功了。
簽名和驗證
私鑰簽名
公鑰驗證
數字簽名和驗證(反過來用)。我用我的私鑰對欠條進行簽名。你用我的公鑰對他進行解密,就可以拿到欠條。任何人都無法造出能夠被我的公鑰去還原成明文的加密數據。
加密+簽名
防止別人偽造信息來源。
密碼學密鑰和登錄密碼
密鑰(key) 完美的契合的東西。是我在拿到你密文之后可以得到原文。
場景:用于加密和解密
目的:保證數據被盜時不會被人讀懂
焦點:數據
是一個數學性非常強的東西。
密碼(password) 通行口令,是一個身份的驗證。密碼沒有任何數學相關的東西。
場景:用戶進入網站或者游戲前的身份驗證
焦點:身份
目的:數據提供方或應用服務方對賬戶擁有者數據的保護,保證「你是你」的時候才提供權限
Base64
將二進制數據轉換成由64個字符組成的字符 的編碼算法
a-z A-Z 0-9 + /
什么是二進制數據?
廣義:所有計算機數據都是二進制數據
狹義: 非本數據即二進制數據
Base64的缺點
因為自身的原理,因此每次 Base64 編碼之后,數據都會增加約1/3,所以會影響存
儲和傳輸性能。
Base64的用途
將 進制數據擴充 儲存和傳輸途徑( 如可以把數據保存到文本文件、可以通過聊天對話框或 短信形式發送二進制數據、可以在 URL中加入 簡單的二進制數據)
普通的字符在經過 Base64 編碼后的結果會變得 眼不可讀,因此可以適用于一定條件下的防偷窺(較少用)
Base58
去掉I l O 0 + /
用于加密貨幣的地址
URL encoding
在 URL 的字符中,對一些用于特殊用途的保留字符,使用百分號"%"為前綴進行單獨編碼,以避
免出現解析錯誤。
將URL中的保留字符使用%進行編碼
目的;消除歧義,避免解析錯誤
壓縮與解壓縮
壓縮:將數據使 具有存儲優勢的編碼算法進 編碼。
解壓縮:將壓縮數據解碼還原成原來的形式,以 方便使用 。
常見的壓縮算法;DEFLATE、JPEG、MP3
壓縮屬于編碼嗎?
編碼即把數據從一種形式轉換為另一 種形式。壓縮過程屬于編碼過程,解壓縮過程屬于解碼過程。
媒體數據的編解碼
將圖像、音頻、視頻數據通過編碼來轉換成存檔形式(編碼),以及從存檔形式轉換回來(解碼)。
優秀的壓縮算法,使用的空間更小,壓縮速度更快。
WebP>PNG/JPEG
序列化
把數據對象( 一般是內存中的,如JVM 中的對象)轉換成字節序列的過程。對象在程序內存 的里存放形式是散亂的(存放在 同的內存區域、并且由引用進行連接),通過序 化可以把內存中的對象轉換成一個字節序 ,從而使 用byte[]等形式進行本地存儲或網絡傳輸,在需要的時候重新組裝(反序列化)來使用。
序列化:把數據對象( 一般是內存中的,如JVM 中的對象)轉換成字節序列的過程。
反序列化:把字節序列重新轉化為內存中的對象。
目的: 使內存中的對象可以被存儲和傳輸
Hash 重點內容
Hash是單向的
定義:把任意數據轉換成指定范圍(通常很小,如256 字節以內)的數據。
作用:摘要、數字指紋
經典算法:MD5、SHA1、SHA256
實際用途:數據完整性
hashCode和HashMap
為什么hashCode 和 equals 都要重寫呢
指紋信息,快讀判斷你是你。
隱私保護
加鹽:使彩虹表失效
MD5是不可逆加密
簽名與驗證(完整)
字符集
ASCII:128 個字符,1 字節
ISO-8859-1:對 ASCII 進 擴充,1 字節
Unicode:13 萬個字符,多字節
UTF-8:Unicode 的編碼分支
UTF-16 :Unicode 的編碼分支
GBK / GB2312 / GB18030:中國 研標準,多字節,字符集 + 編碼
————————————————
版權聲明:本文為CSDN博主「songyuequan」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/songyuequan/article/details/83215478
總結
以上是生活随笔為你收集整理的HenCoder Plus L02—— 编码、加密、Hash的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【bzoj2500】幸福的道路 树形d
- 下一篇: Android 频道管理,可拖动item