~~~~ 本文主要介紹幾種分類的加密算法,以及各個分類算法的典型算法。肯定不全主要是摘要幾種常用的,僅供自己以後檢視
摘要算法
~~~~ 消息經過散列函數處理後,獲得唯一的散列值這一過程稱為“消息摘要”,是以該類算法也可以稱為雜湊演算法。
~~~~ 比較常用的比如:MD算法家族,SHA算法家族。。。
-
MD算法家族
MD5算法的原理可簡要的叙述為:MD5碼以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,将這四個32位分組級聯後将生成一個128位散列值。
首先需要填補資訊以確定資訊的比特位長度減去448後能被512整除(資訊比特位長度mod 512 = 448)。也就是說資料補位後,其位數長度隻差64位(bit)就是512的整數倍。然後,一個以64位二進制表示的資訊的最初長度被添加進來。資訊被處理成512位damgard/merkle疊代結構的區塊,而且每個區塊要通過三個不同步驟的處理
-
SHA算法家族
SHA算法是基于MD4算法,作為MD算法的繼任者的。SHA與MD算法的不同之處主要是摘要長度,SHA的摘要長度更長,安全性更高。
-
對稱加密算
~~~~ 加密解密使用同一套密鑰,這就是對稱加密算法的核心。
~~~~ 根據加密方式又分為密碼和分組密碼,分組密碼的工作模式包括:ECB,CBC,CFB,OFB和CTR等。密鑰的長度決定了算法的安全性。
~~~~ 比較常見的比如:DES,AES等
-
DES
DES算法為密碼體制中的對稱密碼體制。首先明文根據分組模式,按64位進行分組,形成明文組,然後和密鑰64位中的56位按位替代或交換的方法形成密文組
-
AES
AES不是将拿到的明文一次性加密,而是分組加密,就是先将明文切分成長度相等的塊,每塊大小128bit,再對每一小塊進行加密并不是所有的原始明文串能被等分成128bit,例如原串大小200bit,那麼第二個塊隻有72bit,是以就需要對第二個塊進行填充處理,讓第二個塊的大小達到128bit。
-
常見的填充模式有:
~~~~ NoPadding:不進行填充,要求原始加密串大小必須是128bit的整數倍;
~~~~ PKCS5Padding:假設塊大小8位元組,如果這個塊跟8位元組還差n個位元組,那麼就在原始塊填充n,直到滿8位元組;
~~~~ PKCS7Padding:跟PKCS5Padding的填充方式一樣,不同的是,PKCS5Padding隻是對8位元組的進行填充,PKCS7Padding可以對1~256位元組大小的block進行填充;
-
AES有多種加密模式,包括:ECB,CBC,CTR,OCF,CFB,最常見的還是ECB和CBC模式。
~~~~ ECB模式:每個塊進行獨立加密,塊與塊之間加密互不影響,這樣就能并行,效率高。如果兩個塊的明文一模一樣,那麼加密出來的東西也一模一樣。
~~~~ CBC模式:引入了一個新的概念,初始向量iv。iv的作用就是為了防止同樣的明文塊被加密成同樣的内容。原理是第一個明文塊跟初始向量做異或後加密,第二個塊跟第一個密文塊做異或再加密,依次類推,避免了同樣的塊被加密成同樣的内容。
-
非對稱加密算
~~~~ 非對稱加密算法與對稱加密算法的主要差別在于非對稱加密的算法用于加密和解密的密鑰不相同,一個公鑰(公開),一個密鑰(保密),公鑰加密資料隻有使用私鑰能解密,反之私鑰加密,隻可使用公鑰解密。
~~~~ 非對稱加密算法源于DH算法(密鑰交換算法)。比較常見分為兩類,一類:基于大數因子分解數學難題典型非對稱加密算法:RSA;一類:基于離散對數問題的常用非對稱加密算法:ElGamal
數字簽名算法
~~~~ 數字簽名算法可以看做是一種帶有密鑰的消息摘要算法,并且密鑰包括公鑰跟私鑰。可以說數字簽名算法是非對稱加密算法和消息摘要算法的結合體。
~~~~ 數字簽名算法包括簽名和驗證兩項操作,遵循“私鑰簽名,公鑰驗證”的簽名驗證方式。是以,我們可以把數字簽名算法看成是一種附加公鑰和私鑰的消息摘要算法。
~~~~ 數字簽名算法主要包括RSA,DSA,ECDSA三種算法。RSA即是非對稱算法中的經典,也是數字簽名算法中的經典。