2012-07-29 82 views
-2

在我的项目我写拖的方法来加密和解密字符串一些字符串在我的XML文件 但知道我要加密整个XML文件我怎么可以加密通过C#中的整个XML文件

我想编辑方法来加密和解密而不是字符串的整个文件

public static string Encrypt(string plainText) 
      { 
       byte[] initVectorBytes = Encoding.ASCII.GetBytes("[email protected]#$%asdf"); 
       byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); 
       byte[] keyBytes = Encoding.Unicode.GetBytes("_+)&qwer9512popo"); 
       RijndaelManaged symmetricKey = new RijndaelManaged(); 
       symmetricKey.Mode = CipherMode.CBC; 
       ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes); 
       MemoryStream memoryStream = new MemoryStream(); 
       CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write); 
       cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); 
       cryptoStream.FlushFinalBlock(); 
       byte[] cipherTextBytes = memoryStream.ToArray(); 
       memoryStream.Close(); 
       cryptoStream.Close(); 
       string cipherText = Convert.ToBase64String(cipherTextBytes); 
       return cipherText; 
      } 
      public static string Decrypt(string cipherText) 
      { 
       byte[] initVectorBytes = Encoding.ASCII.GetBytes("[email protected]#$%asdf"); 
       byte[] cipherTextBytes = Convert.FromBase64String(cipherText); 
       byte[] keyBytes = Encoding.Unicode.GetBytes("_+)&qwer9512popo"); 
       RijndaelManaged symmetricKey = new RijndaelManaged(); 
       symmetricKey.Mode = CipherMode.CBC; 
       ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes); 
       MemoryStream memoryStream = new MemoryStream(cipherTextBytes); 
       CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); 
       byte[] plainTextBytes = new byte[cipherTextBytes.Length]; 
       int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); 
       memoryStream.Close(); 
       cryptoStream.Close(); 
       string plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); 
       return plainText; 
      } 
+0

http://stackoverflow.com/questions/4017534/c-sharp-encrypt-xml-file – 2012-07-29 11:20:33

+0

@ShreeKhanal不幸的是这个问题的答案是次优的,它已被指定为重复本身 – 2012-07-29 12:08:05

回答

3

File.ReadAllText()回报一个字符串,所以你可以用ReadAllText()加密你的普通字符串方法,然后用File.WriteAllText()把加密版本写回文件。

对于大文件,但是,您可以读取并逐行处理。例如

using (StreamReader sr = new StreamReader("xmlfile.txt")) 
{ 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     File.WriteAllText("mynewxmfile.xml", MyEncryptMethod(line)); 
    } 
} 
+0

不要这样做,如果你有一个大的XML文件,但。 – 2012-07-29 11:36:22

1

它非常简单,将您的XML字符串,并将其传递到加密/解密功能。 您使用哪些类创建XML?如果你正在使用的XMLDocument,那么下面的函数可用于你的XML转换为字符串

public string ConvertToString(XmlDocument xml) 
{ 
    StringWriter sw = new StringWriter(); 
    XmlTextWriter tx = new XmlTextWriter(sw); 
    xml.WriteTo(tx); 
    string str = sw.ToString(); 
    return str; 
} 

同样,你可以在解密,则可以将解密的字符串转换为XML如下

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(decruptString); 
+0

如果知道XML文件很小,这将是一个选项。请注意,您必须注意生成的字符串的字符编码。 – 2012-07-29 11:34:15

相关问题