c# - C# 中的对象加密和解密

标签 c# wcf encryption

我使用 WCF Web 服务以数据对象的形式通过 Internet 将数据从服务器发送到客户端。我创建了一个可序列化的类,并使用该类发送我的数据。

下面是我的类(class)的一个例子:

[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();
        }

最佳答案

最好使用 SSL,这将增加您所需的所有安全性,同时避免大多数陷阱。

除此之外,您当然可以使用CryptoStream。您只能加密字节,但您已经通过提及 Serialized 表明您理解这一点。

请注意,如果您想创建自己的安全流,您将需要:

  • 两个安全生成的 key 以及加密和一个 MAC key
  • 安全密码,例如 AesManaged
  • 使用(默认值)CBC 和 PKCS7Padding 设置
  • 检索随机生成的 IV 并将其添加到密文中
  • 根据结果创建 HMACSHA256

为了相当安全。如果这没有引起任何警觉,请使用最新的 TLS 实现

关于c# - C# 中的对象加密和解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914157/

相关文章:

c# - 为什么我不能将 ToList() 与我的 KeyCollection 一起使用

c# - IDENTITY_INSERT 设置为 OFF 时出现问题? :-/

Java vs C# 算法执行

.NET ASMX - 返回纯 JSON?

c# - 为什么 WCF 在遇到 302 响应时无法调用 SOAP 服务?

c# - 如何通过 MSMQ(使用 WCF)发送 XDocument?

encryption - 您使用什么系统为一群人加密文件(首选与操作系统无关)?

c# 如何获取资源文件夹中所有项目的文件路径

ios - Apple MDM - 无法解密配置文件(未安装此配置文件的解密 key )

python - 在 Python 中使用套接字发送加密字符串