.NETで簡単に暗号化(4) BearCatのモバイルと音楽のある生活

.NETで簡単に暗号化(4)のページです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 トラックバック(-) コメント(-)

.NETで簡単に暗号化(4)

前回から引き続き、DataSetの暗号化です。
XmlSerializer.Serialize メソッドのパラメータにCryptoStreamが指定できるかコードを書いてみました。

結果からいえば、あっけなく暗号化と復号化ができました。
コードは以下の通りです。

【暗号化:C#】

using System.Security.Cryptography;
using System.Xml.Serialization;

/// <summary>
/// データセットを暗号化する
/// </summary>
/// <param name="filePath">保存するファイルパス</param>
/// <param name="ds">暗号化対象データセット</param>
/// <param name="key">暗号キー</param>
/// <param name="IV">初期化ベクタ</param>
public static void Encrypt(string filePath, System.Data.DataSet ds, byte[] key, byte[] IV)
{
    XmlSerializer ser = new XmlSerializer(typeof(System.Data.DataSet));
    using (SymmetricAlgorithm sa = new RijndaelManaged())
    {
        ICryptoTransform encryptor = sa.CreateEncryptor(key, IV);
        using (FileStream msEncrypt = new FileStream(filePath, FileMode.Create))        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                ser.Serialize(csEncrypt, ds);
            }
        }
    }
}


基本的な流れは『.NETで簡単に暗号化(1)』から変わっていません。
主な変更点は
1.XmlSerializerを使用
2.MemoryStreamをFileStreamに変更
3.CryptoStream.Writeメソッドを使わずXmlSerializer.Serialize メソッドで書き込み
です。
2は結果をファイルに保存したかっただけで、必ずしも変更の必要はありませんでした。

復号化も変更点は似たようなものです。

【復号化:C#】

using System.Security.Cryptography;
using System.Xml.Serialization;
/// <summary>
/// データセットを復号する
/// </summary>
/// <param name="filePath">復号するファイルパス</param>
/// <param name="key">暗号キー</param>
/// <param name="IV">初期化ベクタ</param>
/// <returns>復号したデータセット</returns>
public static System.Data.DataSet Decrypt(string filePath, byte[] key, byte[] IV)
{
    object decrypted = null;
    XmlSerializer ser = new XmlSerializer(typeof(System.Data.DataSet));
    using (SymmetricAlgorithm sa = new RijndaelManaged())
    {
        ICryptoTransform decryptor = sa.CreateDecryptor(key, IV);
        using (FileStream msDecrypt = new FileStream(filePath, FileMode.Open))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            {
                decrypted = ser.Deserialize(csDecrypt);
            }
        }
    }
    System.Data.DataSet ds = (System.Data.DataSet)decrypted;
    return ds;
}



スポンサーサイト

2007年07月18日 トラックバック(0) コメント(0)












管理者にだけ公開する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。