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

+0

あなたの迅速な対応に感謝します。暗号化の方法について多くの質問がありましたが、何が最善のものか分かりませんでした。 – Shredder2500