加密算法是指,發送者對明文進行加密而後生成密文,接受者再對密文解密獲得明文的過程。html
最大的區別是,加密是可逆的,而簽名是不可逆的。好比對於明文"Hello world"進行加密後獲得結果R,還可使用密鑰經過結果R解密獲得"Hello world",而對"Hello world"進行簽名獲得結果R,卻不能使用密鑰經過R獲"Hello world",試想若是幾十個字符就能夠存儲存儲幾G的數據,那壓縮算法要被完全顛覆了。算法
加密是對數據進行機密性保護,簽名主要用於身份驗證。好比A對B發送了信息Message;經過加密後,即使C經過網絡包截取得到了Message,它也不知道里面的具體內容,只能看到一堆亂碼;經過簽名,假設D也用相同的加密算法發送了此Message,可是簽名錯誤,那麼B經過簽名依然拒絕D的Message。安全
在加密算法以外,爲了解決祕鑰的分發的問題,出現了:對稱加密和非對稱加密。最主要的就是密鑰的不一樣,對稱加密客戶端和服務端使用同一個密鑰,非對稱加密使用一對不一樣的密鑰。網絡
對稱加密指的就是加密和解密使用同一個祕鑰,因此叫作對稱加密。對稱加密只有一個祕鑰,做爲私鑰。 常見的對稱加密算法:AES,DES,3DES等。目前用的最廣發而且安全的算法是AES。函數
非對稱加密指的是:加密和解密使用不一樣的祕鑰,一把做爲公開的公鑰,另外一把做爲私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。 常見的非對稱加密算法:RSA性能
公鑰
加密,使用 私鑰
解密私鑰
加密,使用 公鑰
解密(私鑰簽名,公鑰驗籤)對稱加密算法相比非對稱加密算法來講,加解密的效率要高得多。可是缺陷在於對於祕鑰的管理上,以及在非安全信道中通信時,密鑰交換的安全性不能保障。因此在實際的網絡環境中,會將二者混合使用。大數據
在對B/S模型中,能夠用以下方式進行數據的安全傳輸:
(1)、 服務端計算出一對祕鑰pub/pri。將私鑰保密,將公鑰公開。
(2)、客戶端請求服務端時,拿到服務端的公鑰pub。
(3)、客戶端經過AES計算出一個對稱加密的祕鑰X。 而後使用pub將X進行加密。
(4)、客戶端將加密後的密文發送給服務端。服務端經過pri解密得到X。
(5)、而後兩邊的通信內容就經過對稱密鑰X以對稱加密算法來加解密。加密
假設A、B雙方均擁有一對公私鑰(PUB_A
、PRI_A
、PUB_B
、PRI_B
)。A向B發送Message的整個簽名和加密的過程以下:spa
Message_hash_A
PRI_A
對Message_hash_A
進行簽名獲得Message_sign
(這裏爲何不直接對Message進行簽名,而要對Message_hash_A
進行簽名呢?由於Message的長度可能很長,而Message_hash_A
的長度則是固定的,這樣性能更高,格式也固定,何況hash的結果通常不會出現重複的可能)PUB_B
對信息Message
和信息Message_sign
進行加密獲得Message_RSA
,這時A將Message_RSA
發送給B。當B接收到A的信息Message_RSA
後,獲取Message
的步驟以下:code
PRI_B
解密獲得明文:Message
和Message_sign
;PUB_A
解Message_sign
獲得Message_hash_A
;同時,B再對Message
使用與A相同的HASH獲得Message_hash_B
;Message_hash_A
與Message_hash_B
相同,則說明Message
沒有被篡改過。參考文檔:
http://www.cnblogs.com/mddblog/p/5380556.html