我使用 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/