http://blog.csdn.net/laotse/article/details/5910378
2010
網(wǎng)上介紹c#加密解密的文章和代碼都說(shuō)的不太明白,現用最直白語(yǔ)言說(shuō)一下
首先3個(gè)概念,1、不可逆加密2、可逆對稱(chēng)加密3、可逆非對稱(chēng)加密
1、不可逆加密,大家最熟悉的一種,md5 sha1就是,加密后就不能解密,只能用于存儲密碼和校驗文件變動(dòng),不能用于網(wǎng)絡(luò )通訊。
2、可逆對稱(chēng)加密,用一個(gè)鑰匙把內容加密,只要有這個(gè)鑰匙的人就可以解密,就像登錄windows,要一個(gè)密碼,只要有密碼誰(shuí)都能登錄,但是如果沒(méi)有這密鑰,就很難很難解密,就像破解windows密碼需要窮盡一樣。非常適合網(wǎng)絡(luò )加密通訊。如果客戶(hù)和服務(wù)器都有著(zhù)把鑰匙,那么通訊過(guò)程是保密的,即使通訊內容被截獲,看到的也是一堆亂七八糟的加密后的byte,通訊內容是安全的。
但是這就產(chǎn)生一個(gè)問(wèn)題了,客戶(hù)端有這把鑰匙在程序某個(gè)部分,如果被反編譯或者什么的被人發(fā)現了,那么以后所有客戶(hù)端和服務(wù)器通訊都可以被截獲者解密,從而失去了加密意義,所以這把鑰匙服務(wù)器要經(jīng)常變換不能事先給客戶(hù)端,需要每次通訊前才給客戶(hù)端,但是這樣這把鑰匙還是可以被截獲著(zhù)截獲,所以如何安全發(fā)送這把鑰匙就成了關(guān)鍵,只要鑰匙安全了,那么整個(gè)對稱(chēng)加密就安全了,如果鑰匙被人發(fā)現了,這個(gè)過(guò)程就沒(méi)有秘密可言。
所以可逆非對稱(chēng)加密就出現了
3、可逆非對稱(chēng)加密,客戶(hù)端和服務(wù)器通訊的時(shí)候,客戶(hù)端先用非對稱(chēng)加密生成2把隨機鑰匙,一把叫公鑰一把叫密鑰,關(guān)鍵就在這里,用這個(gè)公鑰加密的內容不能用公鑰解密,只能用密鑰解密,客戶(hù)端把公鑰發(fā)送給服務(wù)器,服務(wù)器用這個(gè)客戶(hù)端生成的公鑰把某內容加密后返還給客戶(hù)端,客戶(hù)端用那把密鑰解密。
仔細看看這個(gè)過(guò)程,假定有個(gè)攔截者,一開(kāi)始,客戶(hù)把公鑰發(fā)送給服務(wù)器,比如讓攔截者給截獲了,服務(wù)器返回用這個(gè)公鑰加密的內容,也讓攔截者給截獲了,攔截者想用這個(gè)公鑰解密,但是發(fā)現不行,公鑰加密的內容只能用密鑰才能解密,公鑰只起一個(gè)加密作用。那密鑰在哪呢?在客戶(hù)端那個(gè)程序的內存里,并沒(méi)有通過(guò)網(wǎng)絡(luò )發(fā)送(而且呢,這個(gè)公鑰和密鑰是臨時(shí)隨機生成的,在內存里,當客戶(hù)端不運行的時(shí)候即使反編譯該程序也看不到),客戶(hù)端那個(gè)程序就可以解密,而攔截者即使截獲了公鑰和公鑰加密的內容,也是白忙一場(chǎng)一點(diǎn)用都沒(méi)有。所以服務(wù)器返回的那段用公鑰加密的內容是安全的。
大家是不是發(fā)現非對稱(chēng)加密比對稱(chēng)加密要安全不知道多少倍啊,全隨機的,那直接全都用非對稱(chēng)加密就天下太平了那還要對稱(chēng)加密干什么呢?但是非對稱(chēng)雖好,但是卻很慢,不能對大量的通信內容進(jìn)行加密通信(不知道,反正都這么說(shuō)),只能開(kāi)始通信的時(shí)候用這種方式傳送一點(diǎn)很重要的內容。
那用來(lái)傳送點(diǎn)什么內容呢?
用來(lái)傳送對稱(chēng)加密的那邊鑰匙就非常合適,2部分不是說(shuō)對稱(chēng)加密唯一不安全的地方就是那邊鑰匙的傳送過(guò)程不安全么,那么先用非對稱(chēng)加密傳送對稱(chēng)加密的鑰匙,這樣對稱(chēng)加密的鑰匙的傳送過(guò)程就安全了,鑰匙安全問(wèn)題解決了所以對稱(chēng)加密和非對稱(chēng)加密就一樣安全了,這時(shí)就關(guān)閉非對稱(chēng)加密,以后都用對稱(chēng)加密了,速度也上來(lái)了。這就是非對稱(chēng)加密和對稱(chēng)加密配合使用的過(guò)程,網(wǎng)上很多應用都是這種方式。
在.net下實(shí)現這3種加密太容易了,都是封裝好的不能再好的類(lèi)。過(guò)程幾行就完了。對稱(chēng)加密用TripleDESCryptoServiceProvider,最大支持24字節(192位)的加密,非對稱(chēng)用RSACryptoServiceProvider。
聯(lián)系客服