密碼學的作用與基本概念
首先說明密碼學與加密解密不是一回事:密碼學包括的範圍很廣,它是一個大的學科,包括密碼協議、密碼算法、散列算法、數字簽名、數字水印以及密碼分析等很多內容。而我們程序中用的加密與解密只是它的一個方面。

基本概念與模型也沒必要多說,密碼學所研究的內容:簡單的說就是一個發送者,一個接受者之間,如何安全有效的傳遞信息的問題。下面說說大家經常用到的幾個概念。

回到目錄
2. 幾個基本概念
數據加密是我們日常用得最多的,就是採用一種加密算法和特定的密鑰來對重要的敏感信息進行保護,當需要時再進行解密。加密算法總的來說可以分爲兩類:

1) 對稱加密算法。就是我們通常所說的 DES,RC2,AES 等,這些都是現在國際上用得比較多的,可是說是事實上的國際標準吧。它的加密密鑰和解密密鑰是相同的,密鑰的長度根據不同的算法可以採用不同的長度,一般爲 128,192,256 位。對稱加密的速度快,但是密鑰分發是一個困難問題 (一般的較小的應用都不需要考慮這個問題)。一般的大量數據的加密多是採用對稱加密算法的。.NET 中有 4 種默認的對稱加密算法。大家可以直接使用。

2) 非對稱加密算法,也稱公鑰密碼。比如我通常所說的 RSA, 公鑰密碼的特殊之處在於它的加密密鑰和解密密鑰是不相同的,一般人看來,這是件很神奇的事情。就是它的這個特性給密鑰分發困難帶來了絕佳的解決方案。比如,用對稱密碼加密明文,而用非對稱密碼加密對稱密碼的密鑰,然後將密文進行傳輸即可,接受者,利用自己的私鑰來解密非對稱密碼加密過的密文,即會得到對稱加密的密鑰,然後用來解密明文。非對稱密碼對於一般的應用來說也用得比較少,而且它的加解密速度慢,只適合加密少量的重要數據。它的密鑰很長,大約 800-2048 位不等吧,具體要看所採用的大素數。

3) 散列函數。也就是通常所說的哈希函數,常用的就是 MD5,SHA 了。哈希函數的作用就是相當於“指紋”,它是不可逆的,可以沒有密鑰,也可以使用密鑰。給定一任意的長度消息 M,都可以產生固定長度的散列值 m。散列函數必須滿足的特性就是 : 計算 M 的散列值要快,反之則是相當困難的,且找到 2 個具有相同散列值的消息是困難的。一般用於防止篡改,比如很多大型的軟件下載的時候,都會在網站公佈文件的散列值,下載後就可以根據工具計算其散列值對比,看文件是否正確或者遭到修改。哈希完全不等於加密,很多時候開發人員都對用戶表中的密碼進行哈希後保存,實際上不叫做加密,只是相當於把密碼的“特徵指紋”保存下來,而對非法攻擊者來說,在不知道真實的“密碼”的情況下,得到有相同指紋的密碼是極爲困難的。