2012-02-27 62 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