加解密算法分析

1、概述:

    加密算法是指,發送者對明文進行加密而後生成密文,接受者再對密文解密獲得明文的過程。html

一、加密與簽名區別

    最大的區別是,加密是可逆的,而簽名是不可逆的。好比對於明文"Hello world"進行加密後獲得結果R,還可使用密鑰經過結果R解密獲得"Hello world",而對"Hello world"進行簽名獲得結果R,卻不能使用密鑰經過R獲"Hello world",試想若是幾十個字符就能夠存儲存儲幾G的數據,那壓縮算法要被完全顛覆了。算法

二、加密與簽名的使用場景

    加密是對數據進行機密性保護,簽名主要用於身份驗證。好比A對B發送了信息Message;經過加密後,即使C經過網絡包截取得到了Message,它也不知道里面的具體內容,只能看到一堆亂碼;經過簽名,假設D也用相同的加密算法發送了此Message,可是簽名錯誤,那麼B經過簽名依然拒絕D的Message。安全

2、算法分類

    在加密算法以外,爲了解決祕鑰的分發的問題,出現了:對稱加密和非對稱加密。最主要的就是密鑰的不一樣,對稱加密客戶端和服務端使用同一個密鑰,非對稱加密使用一對不一樣的密鑰。網絡

一、散列(哈希)函數

  • 一般有MD五、SHA一、SHA25六、SHA512
  • 實質是抽取特徵碼,這樣通常不會重複!是的,不一樣的文本它的哈希結果是有可能相同的,但機率很小。
    (舉例:好比想要識別一我的,咱們能夠經過他的指紋來鎖定他,指紋出現相同的機率很低吧!在這裏,人就至關於數據,而指紋就至關於對人這個數據進行hash後獲得的結果)
  • 對任意一個二進制數據進行哈希,能夠獲得定長的字符串結果,例如MD5哈希結果是128位,更可能是以32個字符的十六進制格式哈希輸出
  • 還有就是不可逆的,既然是不可逆的,那麼固然不是用來加密的,而是簽名

二、對稱加密

    對稱加密指的就是加密和解密使用同一個祕鑰,因此叫作對稱加密。對稱加密只有一個祕鑰,做爲私鑰。 常見的對稱加密算法:AES,DES,3DES等。目前用的最廣發而且安全的算法是AES。函數

  • 加密和解密使用同一個祕鑰,加密解密的速度快
  • 適合給大數據進行加密
  • 密鑰的安全性很是重要

三、非對稱加密

    非對稱加密指的是:加密和解密使用不一樣的祕鑰,一把做爲公開的公鑰,另外一把做爲私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。 常見的非對稱加密算法:RSA性能

  1. 使用 公鑰 加密,使用 私鑰 解密
  2. 使用 私鑰 加密,使用 公鑰 解密(私鑰簽名,公鑰驗籤)
  3. 更安全,固然速度會慢下來,若是隨着硬件的突破,使用愈來愈多,特別是支付

四、區別

    對稱加密算法相比非對稱加密算法來講,加解密的效率要高得多。可是缺陷在於對於祕鑰的管理上,以及在非安全信道中通信時,密鑰交換的安全性不能保障。因此在實際的網絡環境中,會將二者混合使用。大數據

五、實例

    在對B/S模型中,能夠用以下方式進行數據的安全傳輸:
(1)、 服務端計算出一對祕鑰pub/pri。將私鑰保密,將公鑰公開。 
(2)、客戶端請求服務端時,拿到服務端的公鑰pub。 
(3)、客戶端經過AES計算出一個對稱加密的祕鑰X。 而後使用pub將X進行加密。 
(4)、客戶端將加密後的密文發送給服務端。服務端經過pri解密得到X。 
(5)、而後兩邊的通信內容就經過對稱密鑰X以對稱加密算法來加解密。加密

3、RSA算法分析:

    假設A、B雙方均擁有一對公私鑰(PUB_APRI_APUB_BPRI_B)。A向B發送Message的整個簽名和加密的過程以下:spa

  1. A先使用HASH對Message生成一個固定長度的信息摘要Message_hash_A
  2. A使用A的私鑰PRI_AMessage_hash_A進行簽名獲得Message_sign(這裏爲何不直接對Message進行簽名,而要對Message_hash_A進行簽名呢?由於Message的長度可能很長,而Message_hash_A的長度則是固定的,這樣性能更高,格式也固定,何況hash的結果通常不會出現重複的可能)
  3. A接着使用B的公鑰PUB_B對信息Message和信息Message_sign進行加密獲得Message_RSA,這時A將Message_RSA發送給B。

當B接收到A的信息Message_RSA後,獲取Message的步驟以下:code

  1. B用本身的私鑰PRI_B解密獲得明文:MessageMessage_sign
  2. 而後B使用A的公鑰PUB_AMessage_sign獲得Message_hash_A;同時,B再對Message使用與A相同的HASH獲得Message_hash_B
  3. 若是Message_hash_AMessage_hash_B相同,則說明Message沒有被篡改過。

參考文檔:

http://www.cnblogs.com/mddblog/p/5380556.html

相關文章
相關標籤/搜索