關於密碼學那些事

編碼表知識

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

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算法作的非對稱加密。其中籤名用的是私鑰簽名,驗證簽名用的是公鑰。spa

下圖表示發件人使用哈希函數,將消息明文進行一個消息摘要,獲得了一個hash值,而後使用私鑰對這個hash值進行加密,獲得signature(簽名值),而後將明文和這個簽名值一塊兒發送過去。

服務器收到後,先要用發件人的公鑰進行解密,解密後獲得那個hash值,而後將原文也進行一次hash函數的運算,若是得出來的值和解密後的那個hash值一致,表明數據完整,沒有被篡改過。

image.png

相關文章
相關標籤/搜索