有沒有人有任何關於如何將序列化數據加密到文件然後使用DES讀回的例子?C# - 從流中對DES加密文件進行序列化/反序列化
我已經寫了一些代碼已經不工作,但我寧願看到一個新的嘗試,而不是追求我的代碼。
編輯:對不起,忘了提及我需要一個使用XmlSerializer.Serialize/Deserialize的例子。
有沒有人有任何關於如何將序列化數據加密到文件然後使用DES讀回的例子?C# - 從流中對DES加密文件進行序列化/反序列化
我已經寫了一些代碼已經不工作,但我寧願看到一個新的嘗試,而不是追求我的代碼。
編輯:對不起,忘了提及我需要一個使用XmlSerializer.Serialize/Deserialize的例子。
加密
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);
}
}
}
解密:
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);
}
}
}
用法:
DESCryptoServiceProvider key = new DESCryptoServiceProvider();
MyObject obj = new MyObject();
EncryptAndSerialize("testfile.xml", obj, key);
MyObject deobj = DecryptAndDeserialize("testfile.xml", key);
您需要MyObject來改變你的對象的任何類型是你序列化,但這是一般的想法。訣竅是使用相同的SymmetricAlgorithm實例來加密和解密。
Here is an example DES加密/解密爲一個字符串。
對不起,我需要一個使用XmlSerializer的例子。我會修改主要問題。 – GenericTypeTea 2009-06-08 14:10:27
此主題給出了基本思路。這是一個使這些功能通用的版本,並且還允許您傳遞加密密鑰,因此它是可逆的。
public static void EncryptAndSerialize<T>(string filename, T obj, string encryptionKey) {
var key = new DESCryptoServiceProvider();
var e = key.CreateEncryptor(Encoding.ASCII.GetBytes("64bitPas"), Encoding.ASCII.GetBytes(encryptionKey));
using (var fs = File.Open(filename, FileMode.Create))
using (var cs = new CryptoStream(fs, e, CryptoStreamMode.Write))
(new XmlSerializer(typeof (T))).Serialize(cs, obj);
}
public static T DecryptAndDeserialize<T>(string filename, string encryptionKey) {
var key = new DESCryptoServiceProvider();
var d = key.CreateDecryptor(Encoding.ASCII.GetBytes("64bitPas"), Encoding.ASCII.GetBytes(encryptionKey));
using (var fs = File.Open(filename, FileMode.Open))
using (var cs = new CryptoStream(fs, d, CryptoStreamMode.Read))
return (T) (new XmlSerializer(typeof (T))).Deserialize(cs);
}
順便說一句,我使用CF,所以內存是一個約束。 – GenericTypeTea 2009-06-08 13:58:07
你能詳細說明嗎?你想加密一些東西,然後將其序列化爲XML格式,或者你想要加密序列化的數據嗎? – 2009-06-08 14:16:02
以較少的時間消耗爲準。我收集了需要加密到一個文件的客戶信息。我看到它的工作方式是通過一個cryptostream序列化到一個文件(它工作),然後通過一個文件中的cryptostream反序列化(這是行不通的)。 – GenericTypeTea 2009-06-08 14:21:55