C# - 从流中序列化/反序列化DES加密文件

djd*_*d87 10 c# encryption serialization des

有没有人有任何关于如何将序列化数据加密到文件然后使用DES读回来的例子?

我已经编写了一些不起作用的代码,但我宁愿看到新的尝试,而不是追求我的代码.

编辑:对不起,忘了提我需要一个使用XmlSerializer.Serialize/Deserialize的例子.

Bry*_*hle 19

加密

public static void EncryptAndSerialize(string filename, MyObject obj, SymmetricAlgorithm key)
{
    using(FileStream fs = File.Open(filename, FileMode.Create))
    {
        using(CryptoStream cs = new CryptoStream(fs, key.CreateEncryptor(), CryptoStreamMode.Write))
        {
            XmlSerializer xmlser = new XmlSerializer(typeof(MyObject));
            xmlser.Serialize(cs, obj); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解密:

public static MyObject DecryptAndDeserialize(string filename, SymmetricAlgorithm key)    
{
    using(FileStream fs = File.Open(filename, FileMode.Open))
    {
        using(CryptoStream cs = new CryptoStream(fs, key.CreateDecryptor(), CryptoStreamMode.Read))
        {
            XmlSerializer xmlser = new XmlSerializer(typeof(MyObject));
            return (MyObject) xmlser.Deserialize(cs);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

DESCryptoServiceProvider key = new DESCryptoServiceProvider();
MyObject obj = new MyObject();
EncryptAndSerialize("testfile.xml", obj, key);
MyObject deobj = DecryptAndDeserialize("testfile.xml", key);
Run Code Online (Sandbox Code Playgroud)

您需要将MyObject更改为您要序列化的对象类型,但这是一般的想法.诀窍是使用相同的SymmetricAlgorithm实例进行加密和解密.

  • 得到它了!要用某个密码加密:`key.CreateEncryptor(Encoding.ASCII.GetBytes("64bitPas"),Encoding.ASCII.GetBytes("InitVector"))`,用相同的密码解密:`key.CreateDecryptor(编码. ASCII.GetBytes("64bitPas"),Encoding.ASCII.GetBytes("InitVector"))` (5认同)