1

データ オブジェクトの形式で WCF Web サービスを使用して、インターネット経由でサーバーからクライアントにデータを送信しています。シリアライズ可能なクラスを作成し、このクラスを使用してデータを送信しました。

以下は私のクラスの例です:

[Serializable]
public class DBOList
{
    public string A{ get; set; }
    public string B { get; set; }
}

このオブジェクトのデータを暗号化し、ストリームとしてクライアントに送信することはできますか?

そうでない場合、これを達成するための最良のアプローチは何ですか?

暗号化コード:

        DBOList NewLst = new DBOList();
        NewLst.A = "Value 1";
        NewLst.B = "Value 2";

        byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8 };
        byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };

        DESCryptoServiceProvider des = new DESCryptoServiceProvider();

        // Encryption
        using (var fs = new MemoryStream())
        {
            var cryptoStream = new CryptoStream(fs, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
            BinaryFormatter formatter = new BinaryFormatter();

            // This is where you serialize the class
            formatter.Serialize(cryptoStream, NewLst);
            cryptoStream.FlushFinalBlock();
        }
4

2 に答える 2

2

代わりに SSL を使用することをお勧めします。これにより、ほとんどの落とし穴を回避しながら、必要なすべてのセキュリティが追加されます。

それ以外は、もちろん使用できますCryptoStream。バイトのみを暗号化できますが、言及することでこれを理解していることをすでに示していますSerializable

独自の安全なストリームを作成する場合は、次のものが必要になることに注意してください。

  • 安全に生成された 2 つのキー、および暗号化と MAC キー
  • 次のような安全な暗号AesManaged
  • (デフォルト) CBC および PKCS7Padding を使用して設定
  • ランダムに生成された IV を取得し、暗号文の先頭に追加します
  • HMACSHA256結果の上に を作成します

合理的に安全であること。これで問題が解決しない場合は、最新の TLS 実装を使用してください。

于 2012-08-11T11:27:39.487 に答える