2009-06-08 13 views
8

シリアライズされたデータをファイルに暗号化し、DESを使用してそれを読み取る方法の例はありますか?ストリームからDES暗号化ファイルをシリアライズ/逆シリアル化する

すでに動作していないコードを書いていますが、私のコードを追いかけるのではなく、新鮮な試みが必要です。

EDIT:申し訳ありませんが、XmlSerializer.Serialize/Deserializeを使用した例が必要です。

+0

ところで、私はCFを使用しているので、メモリは制約です。 – GenericTypeTea

+0

詳しいことはできますか?何かを暗号化してXML形式にシリアル化したいのですか、シリアル化されたデータを暗号化しますか? –

+0

どちらの方も時間がかかりません。私はファイルに暗号化する必要がある顧客情報のコレクションを持っています。私はそれが動作するのを見た方法は、cryptostreamを介してファイル(動作する)にシリアル化し、その後、(動作しない)ファイルからcryptostreamを介して逆シリアル化することでした。 – GenericTypeTea

答えて

15

暗号化

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インスタンスを使用して暗号化と復号化を行うことです。

+0

私たちが同じ時間に投稿したように見えますが、私が実際に望んでいたほど近くにあるので、私は受け入れます!ブライスに感謝します。 – GenericTypeTea

+0

+1あなたのスタイルが好きです。 –

+0

しかし、私は既知の文字列からキーをどのように作るのですか? "this_is_a_password_to_unlock_the_file"のように?これはあなたの "Usage"のケースでは機能しますが、キーを保存してそれを使って暗号化されたデータのロックを解除したい場合は、どうすればいいですか? :/ – Cipi

0

Here is an example文字列のDES暗号化/復号化。

+1

申し訳ありませんが、XmlSerializerを使用した例が必要です。私は主な質問を修正します。 – GenericTypeTea

2

このスレッドは、基本的な考えを示しました。ここでは、関数を汎用にするバージョンがあります。また、暗号化キーを渡して元に戻すこともできます。

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); 
} 
+0

-1、ストリームが正しく解読されない暗号ストリーム)。 –

関連する問題