-2

在我的项目中,我编写了两个方法来加密和解密我的 xml 文件中的一些字符串,但我知道我想加密整个 xml 文件

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

  public static string Encrypt(string plainText)
          {
                byte[] initVectorBytes = Encoding.ASCII.GetBytes("teto1620@#$%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("teto1620@#$%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;
          }
4

2 回答 2

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));
    }
}
于 2012-07-29T11:25:33.360 回答
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);
于 2012-07-29T11:16:35.723 回答