.NET中加密和解密的實現方法2 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- .NET中加密和解密的實現方法2 (http://www.webasp.net/article/18/17137.htm) |
| -- 作者:未知 -- 發佈日期: 2005-03-23 |
| 使用私有密鑰解密該文檔,這是唯一可以解密的密鑰,並且沒有通過網絡傳遞。
不對稱算法比對稱算法計算的花費多、速度慢。因此我們不希望在線對話中使用不對稱算法加密所有信息。相反,我們使用對稱算法。下面的例子中我們使用不對稱加密來加密對稱密鑰。接著就使用對稱算法加密了。實際上安全接口層(SSL)建立服務器和瀏覽器之間的安全對話使用的就是這種工作方式。 示例是一個TCP程序,分為服務器端和客戶端。服務器端的工作流程是: 從客戶端接收公共密鑰。 使用公共密鑰加密未來使用的對稱密鑰。 將加密了的對稱密鑰發送給客戶端。 給客戶端發送使用該對稱密鑰加密的信息。 代碼如下: namespace com.billdawson.crypto { public class CryptoServer { private const int RSA_KEY_SIZE_BITS = 1024; private const int RSA_KEY_SIZE_BYTES = 252; private const int TDES_KEY_SIZE_BITS = 192; public static void Main(string[] args) { int port; string msg; TcpListener listener; TcpClient client; SymmetricAlgorithm symm; RSACryptoServiceProvider rsa; //獲取端口 try { port = Int32.Parse(args[0]); msg = args[1]; } catch { Console.WriteLine(USAGE); return; } //建立監聽 try { listener = new TcpListener(port); listener.Start(); Console.WriteLine("Listening on port {0}...",port); client = listener.AcceptTcpClient(); Console.WriteLine("connection...."); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return; } try { rsa = new RSACryptoServiceProvider(); rsa.KeySize = RSA_KEY_SIZE_BITS; // 獲取客戶端公共密鑰 rsa.ImportParameters(getClientPublicKey(client)); symm = new TripleDESCryptoServiceProvider(); symm.KeySize = TDES_KEY_SIZE_BITS; |
| webasp.net |