加密的TCP通訊全過程

網上介紹c#加密解密的文章和代碼都說的不太明白,現用最直白語言說一下

首先3個概念,1、不可逆加密2、可逆對稱加密3、可逆非對稱加密

1、不可逆加密,大家最熟悉的一種,md5 sha1就是,加密後就不能解密,只能用於存儲密碼和校驗文件變動,不能用於網絡通訊。

2、可逆對稱加密,用一個鑰匙把內容加密,只要有這個鑰匙的人就可以解密,就像登錄windows,要一個密碼,只要有密碼誰都能登錄,但是如果沒有這密鑰,就很難很難解密,就像破解windows密碼需要窮盡一樣。非常適合網絡加密通訊。如果客戶和服務器都有着把鑰匙,那麼通訊過程是保密的,即使通訊內容被截獲,看到的也是一堆亂七八糟的加密後的byte,通訊內容是安全的。

但是這就產生一個問題了,客戶端有這把鑰匙在程序某個部分,如果被反編譯或者什麼的被人發現了,那麼以後所有客戶端和服務器通訊都可以被截獲者解密,從而失去了加密意義,所以這把鑰匙服務器要經常變換不能事先給客戶端,需要每次通訊前纔給客戶端,但是這樣這把鑰匙還是可以被截獲着截獲,所以如何安全發送這把鑰匙就成了關鍵,只要鑰匙安全了,那麼整個對稱加密就安全了,如果鑰匙被人發現了,這個過程就沒有祕密可言。

所以可逆非對稱加密就出現了

3、可逆非對稱加密,客戶端和服務器通訊的時候,客戶端先用非對稱加密生成2把隨機鑰匙,一把叫公鑰一把叫密鑰,關鍵就在這裏,用這個公鑰加密的內容不能用公鑰解密,只能用密鑰解密,客戶端把公鑰發送給服務器,服務器用這個客戶端生成的公鑰把某內容加密後返還給客戶端,客戶端用那把密鑰解密。

仔細看看這個過程,假定有個攔截者,一開始,客戶把公鑰發送給服務器,比如讓攔截者給截獲了,服務器返回用這個公鑰加密的內容,也讓攔截者給截獲了,攔截者想用這個公鑰解密,但是發現不行,公鑰加密的內容只能用密鑰才能解密,公鑰只起一個加密作用。那密鑰在哪呢?在客戶端那個程序的內存裏,並沒有通過網絡發送(而且呢,這個公鑰和密鑰是臨時隨機生成的,在內存裏,當客戶端不運行的時候即使反編譯該程序也看不到),客戶端那個程序就可以解密,而攔截者即使截獲了公鑰和公鑰加密的內容,也是白忙一場一點用都沒有。所以服務器返回的那段用公鑰加密的內容是安全的。

 

大家是不是發現非對稱加密比對稱加密要安全不知道多少倍啊,全隨機的,那直接全都用非對稱加密就天下太平了那還要對稱加密幹什麼呢?但是非對稱雖好,但是卻很慢,不能對大量的通信內容進行加密通信(不知道,反正都這麼說),只能開始通信的時候用這種方式傳送一點很重要的內容。

那用來傳送點什麼內容呢?

 

用來傳送對稱加密的那邊鑰匙就非常合適,2部分不是說對稱加密唯一不安全的地方就是那邊鑰匙的傳送過程不安全麼,那麼先用非對稱加密傳送對稱加密的鑰匙,這樣對稱加密的鑰匙的傳送過程就安全了,鑰匙安全問題解決了所以對稱加密和非對稱加密就一樣安全了,這時就關閉非對稱加密,以後都用對稱加密了,速度也上來了。這就是非對稱加密和對稱加密配合使用的過程,網上很多應用都是這種方式。

 

在.net下實現這3種加密太容易了,都是封裝好的不能再好的類。過程幾行就完了。對稱加密用TripleDESCryptoServiceProvider,最大支持24字節(192位)的加密,非對稱用RSACryptoServiceProvider。

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