-2

私のプロジェクトでは、xmlファイル内の文字列を暗号化および復号化するためのtowメソッドを記述していますが、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()して暗号化されたバージョンをファイルに書き戻すことができます。

ただし、大きなファイルの場合は、代わりに1行ずつ読み取って処理できます。例えば

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を作成するためにどのクラスを使用していますか?iF 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 に答える