2012-02-27 67 views
0

目前即時通訊使用System.Security.Cryptography,這是我爲它的代碼:這是一種加密的好方法嗎?

private static SymmetricAlgorithm createCryptoServiceProvider(string key, string IV) 
    { 
     byte[] password; 

     using (MD5 md5 = MD5.Create()) 
      password = md5.ComputeHash(Encoding.UTF8.GetBytes(key)); 
     var crypt = new TripleDESCryptoServiceProvider(); 
     byte[] iv = Encoding.UTF8.GetBytes(IV); 
     crypt.IV = iv; 
     crypt.Key = password; 
     return crypt; 
    } 
    public static byte[] Serialize(object obj, string key, string key2) 
    { 
     var provider = createCryptoServiceProvider(key, key2); 
     using (MemoryStream memory = new MemoryStream()) 
     { 
      using (CryptoStream stream = new CryptoStream(memory, provider.CreateEncryptor(), CryptoStreamMode.Write)) 
      { 
       BinaryFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(stream, obj); 
      } 
      return memory.ToArray(); 
     } 

    } 
    public static object Deserialize(byte[] inBytes, string key, string key2) 
    { 
     var provider = createCryptoServiceProvider(key, key2); 

     using(MemoryStream memory = new MemoryStream(inBytes)) 
     { 
      using (CryptoStream stream = new CryptoStream(memory, provider.CreateDecryptor(), CryptoStreamMode.Read)) 
      { 
       BinaryFormatter formatter = new BinaryFormatter(); 
       return formatter.Deserialize(stream); 
      } 
     } 
    } 

我用這個準備通過套接字發送數據時,我創建了一個對象,將有鑰匙在一個私人字段,並保持密鑰,以便知道密鑰,當在另一個客戶端上接收到對象時,它使用發送的對象內的一個函數,該函數使用該私有字符串密鑰key2;並將消息加密爲字節,並將密鑰設置爲「」,然後將對象發回並保存字節。所以現在只有原始發件人才能解密它。這是做這件事的好方法還是有更好的方法?

回答

4

不要嘗試自己做加密。

http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx

的示例代碼使用TcpClient的,但它應該與任何流IO工作,所以直接的插座應該罰款也。

+0

同意。雖然加密很有趣,但我認爲沒有必要重新發明輪子。你的代碼祝你好運! – SMT 2012-02-27 02:19:48

+0

好的,謝謝你的快速回復,我看到很多關於如何加密的問題,但我不知道哪一個最好。 – Shredder2500 2012-02-27 02:25:18