Wie kann ich eine XML-Datei am einfachsten verschlüsseln? Es handelt sich um eine Datei, die für einige Konfigurationen verwendet wird, und ich möchte nicht, dass jemand damit herumspielt. Sicherheit ist kein Thema, da es sich um ein privates Tool handelt.
Antworten
Zu viele Anzeigen?Wenn Ihnen die Sicherheit egal ist, speichern Sie die Datei einfach zusammen mit einem Hash. Dh:
Ihre.xml und deine.xml.hash
Sie können zum Beispiel System.Security.Cryptography.MD5Managed verwenden. Es geht nur darum, die xml-Datei zu speichern und dann einen Hash der Datei selbst zu speichern. Beim Lesen berechnen Sie einfach den Hash, vergleichen ihn mit dem gespeicherten Wert und verwenden dann Ihre XML-Datei als reguläre Datei.
Natürlich sind die Informationen in der xml-Datei nicht verschlüsselt, man kann sie lesen, aber wenn Sie die Datei bearbeiten, ist der Hash nicht korrekt und Ihr Programm wird den Versuch entdecken. Halten Sie es einfach :)
Wenn Sie die Änderung nur erschweren wollen, senden Sie sie durch eine DeflateStream . Als zusätzlicher Vorteil wird die Datei kleiner sein.
DPAPI ist der einfachste Weg, Dinge in Windows-Systemen zu schützen - siehe ProtectedData.Protect für den Anfang.
Ich würde wahrscheinlich einfach die gesamte Datei durch diese Klasse laufen lassen, die die DPAPI umhüllt, bevor ich sie lese/schreibe. Die resultierende Ausgabe wird kodiert, so dass sie als Textdatei ausgegeben werden kann:
using System;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// used for encryption and decryption
/// </summary>
public static class DataProtector
{
private const string EntropyValue = "secret";
/// <summary>
/// Encrypts a string using the DPAPI.
/// </summary>
/// <param name="stringToEncrypt">The string to encrypt.</param>
/// <returns>encrypt data</returns>
public static string EncryptData(string stringToEncrypt)
{
byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
return Convert.ToBase64String(encryptedData);
}
/// <summary>
/// Decrypts a string using the DPAPI.
/// </summary>
/// <param name="stringToDecrypt">The string to decrypt.</param>
/// <returns>decrypted data</returns>
public static string DecryptData(string stringToDecrypt)
{
byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
return Encoding.Unicode.GetString(decryptedData);
}
}