2017-04-07 6 views
1

暗号化フィールドを実行しています。 OKです。以下のコードです:XMLファイルの作成中にファイルを作成してメモリに保存し、暗号化(C#、WPF、LINQ)

XMLクラスを作成します。

ここ
private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    XmlTextWriter xWriter = new XmlTextWriter("test.xml", Encoding.UTF8); 
    xWriter.Formatting = Formatting.Indented; 
    xWriter.WriteStartElement("root"); 

    testViewClassDataContext dc = new testViewClassDataContext(); 
    List<test_view> tvq = (from tt in dc.test_views 
          select tt).ToList(); 
    var propertiesTestView = typeof(test_view).GetProperties(); 
    var testViewValues = new List<string>(); 

    loopPropXML(tvq, propertiesTestView, testViewValues, xWriter); 

    xWriter.WriteEndElement(); 
    xWriter.Close(); 
} 

public void loopPropXML<T>(IEnumerable<T> queryResult, PropertyInfo[] properites, List<string> addedValues, XmlTextWriter xWriter) 
{ 
    foreach (var qrl in queryResult) 
    { 
     var values = new List<object>(); 
     xWriter.WriteStartElement("tv"); 
     foreach (var property in properites) 
     { 
      Object value = property.GetValue(qrl, null); 
      xWriter.WriteStartElement(property.Name.ToString()); 

      DESEncrypt testEncrypt = new DESEncrypt(); 
      string pass = "qwertyuiop"; 
      string encText = testEncrypt.EncryptString((value == null ? "" : value.ToString()), pass); 

      xWriter.WriteString(encText); 
      xWriter.WriteEndElement(); 
      values.Add(value); 
     } 
     xWriter.WriteEndElement(); 
    } 
} 

暗号化コードは、 "マイクロソフトアカデミーのC#" から取った次のとおりです。

static TripleDES CreateDES(string key) 
{ 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    TripleDES des = new TripleDESCryptoServiceProvider(); 
    des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes(key)); 
    des.IV = new byte[des.BlockSize/8]; 
    return des; 
} 

public string EncryptString(string plainText, string password) 
{ 
    byte[] plainTextBytes = Encoding.Unicode.GetBytes(plainText); 
    MemoryStream myStream = new MemoryStream(); 
    TripleDES des = CreateDES(password); 
    CryptoStream cryptStream = new CryptoStream(myStream, des.CreateEncryptor(), CryptoStreamMode.Write); 
    cryptStream.Write(plainTextBytes, 0, plainTextBytes.Length); 
    cryptStream.FlushFinalBlock(); 
    return Convert.ToBase64String(myStream.ToArray()); 
} 

にそれを変更する方法:

- 最初のビルドファイルとメモリに保存

- 暗号化

- 最後に保存します。

+0

あなたはフィールドの代わりにxmlファイル全体を暗号化することを意味しますか? –

+0

はい:最初に私はちょうどxmlを作成し、メモリに保存(保存しない)してから暗号化して保存します。 – 4est

+0

あなたはちょうど言ったことを実装できませんか? –

答えて

2

ファイルに暗号化されていない値を書く:

XmlTextWriterを使用してファイルへの書き込み
public void loopPropXML<T>(IEnumerable<T> queryResult, PropertyInfo[] properites, List<string> addedValues, XmlTextWriter xWriter) 
{ 
    foreach (var qrl in queryResult) 
    { 
     var values = new List<object>(); 
     xWriter.WriteStartElement("tv"); 
     foreach (var property in properites) 
     { 
      Object value = property.GetValue(qrl, null); 
      xWriter.WriteStartElement(property.Name.ToString()); 
      xWriter.WriteString(value.ToString()); 
      xWriter.WriteEndElement(); 
      values.Add(value); 
     } 
     xWriter.WriteEndElement(); 
    } 
} 

は、実際にそれを作成し、保存し、あなたがこれを行った後、ファイルを暗号化したい場合は読む必要がありますので、

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    const string filename = "test.xml"; 
    XmlTextWriter xWriter = new XmlTextWriter(filename, Encoding.UTF8); 
    xWriter.Formatting = System.Xml.Formatting.Indented; 
    xWriter.WriteStartElement("root"); 

    testViewClassDataContext dc = new testViewClassDataContext(); 
    List<test_view> tvq = (from tt in dc.test_views 
          select tt).ToList(); 
    var propertiesTestView = typeof(test_view).GetProperties(); 
    var testViewValues = new List<string>(); 

    loopPropXML(tvq, propertiesTestView, testViewValues, xWriter); 

    xWriter.WriteEndElement(); 
    xWriter.Close(); 

    string unencrypted = File.ReadAllText(filename); 
    DESEncrypt testEncrypt = new DESEncrypt(); 
    string pass = "qwertyuiop"; 
    string encText = testEncrypt.EncryptString(unencrypted, pass); 
    File.WriteAllText(filename, encText); 
} 
+0

ありがとう** mm8 **! – 4est

関連する問題