關於密碼學那些事

編碼表知識

爲什麼需要編碼表呢?在計算機中無論任何數據的傳輸、存儲、持久化,都是以二進制的形式體現的,那麼當我存一個字符的時候,計算機需要持久化到硬盤,或者保存在內存中。這個時候保存在內存、硬盤的數據顯然也是二進制的。那麼當我需要從硬盤、內存中取出這些字符,再顯示的時候,爲什麼二進制會變成了字符呢?這就是碼錶存在的意義。碼錶其實就是一個字符和其對應的二進制相互映射的一張表。這張表中規定了字符和二進制的映射關係。

image.png

Base64

在參數傳輸的過程中經常遇到的一種情況:使用全英文的沒問題,但一旦涉及到中文就會出現亂碼情況。與此類似,網絡上傳輸的字符並不全是可打印的字符,比如二進制文件、圖片等。Base64的出現就是爲了解決此問題,它是基於64個可打印的字符來表示二進制的數據的一種方法。Base編碼用在加密後,解碼用在解密前。因爲加密後會發生亂碼,不影響使用,但不方便觀看,所以進行Base64編碼。

凱撒加密

最開始用在軍事上,這個凱撒怕敵方截獲軍事情報書,於是使用了加密。凱撒加密就是使用編碼表移動的方式實現。
假設我的明文是“attack” ,經過位移爲3的凱撒加密之後,就會變成“dwwtfn”。

image.png

凱撒加密的破解--頻度分析法如果你掃描任何一部英文書的文字,然後計算出每個字母所使用的頻率,你會發現驚人的祕密,那就是在英語文字中,使用頻率最高的字母永遠是e。插一嘴,因爲e是元音,元音就像音樂中的主旋律一樣,沒有主弦律只有伴奏不成歌曲,英語單詞中如果沒有元音也是不成單詞的。每一個單詞中必須出現一個元音字母。不出所料,a,e,i,o出現的頻率最高。那麼如果密文中出現h的次數最多,可以根據ASCII碼錶找到密文的h和明文的e相差位置是多少,那麼密鑰就是多少,拿到密鑰後就可以破解密文了。

數據對稱加密

DES:Data Encryption Standard ,數據加密標準
AES:Advanced Encryption Standard 高級加密標準
SM4:國密算法

對稱加密指的是加密和解密用的是同一把鑰匙。對稱加密算法的特點是算法公開、計算量小、加密速度快、加密效率高。對稱可逆,一旦密鑰暴漏就會泄露信息。加密後編碼表找不到對應的字符,亂碼,這點可以通過Base64解決。

AES和DES用的密鑰位數不一樣,DES密鑰長度是64位,AES是128位。英文密鑰分別位8byte和16byte。
AES和DES都有工作模式和填充模式,工作模式常用ECB和CBC,ECB可以並行加密,效率高,安全性較差。CBC串行加密,第二塊數據需要依賴第一塊加密後的密文,加密後同樣的原文會得到不同的密文,效率低,安全性高。使用CBC模式的時候需要額外參數。
填充模式指的是原文位數不夠的時候,會自動幫你填充,如果不填充,DES加密原文長度必須是8個byte的整數倍,AES加密原文必須是16個Byte的整數倍。默認的工作模式和填充模式是ECB/PKCS5padding。

非對稱加密RSA,SM2

這篇文章圖解的很清楚
https://blog.csdn.net/baidu_3...

消息摘要

常見的摘要算法有MD5,SHA-1,SHA-256,消息摘要就是將明文通過算法生成一種不可逆的密文,通常密文會比明文短,但是在使用同一個算法中,無論明文長度多少,進行摘要算法後,生成的密文都是固定的。這個密文長度是根據算法走的,比如MD5生成的永遠是128位(16字節)的散列值。sha-1生成的是160位,sha-256生成的是256位。
那摘要算法有什麼用呢?比如對用戶的密碼進行保護,做摘要後保存到數據庫。下載軟件時,官方會給出散列值,如果你下載軟件後計算的散列值(去網上能搜到相關軟件,好壓也有提供)和官網給出的不一致,那麼你下載的就不是官方的,有可能是別人篡改的有病毒的或者是盜版的。

image.png

image.png

數字簽名

數字簽名可以校驗數據的完整性,驗證數據有沒有被篡改過。數字簽名其實就是摘要 + 非對稱加密。比如隨便找個網站,查看到簽名算法爲sha256RSA,就代表用sha256算法做的摘要,用RSA算法做的非對稱加密。其中籤名用的是私鑰簽名,驗證簽名用的是公鑰。

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章