2010-10-25 39 views
2

告訴我加密XML文件的最簡單方法。這是一個用於某些配置的文件,不希望人們使用它。安全性不是問題,因爲它是一個私人工具。c#encrypt xml文件

+0

如果它是一個私人工具,你試圖保護文件的人是誰?自己呢? :P – 2010-10-25 18:17:37

+0

哈哈,好問題。只是爲了讓人們不要觸摸他們不應該做的事情。 – 2010-10-25 18:19:43

+0

你能夠使用標準的app.config(或web.config)文件還是必須是單獨的XML文件? – 2010-10-25 18:20:29

回答

6

如果您不關心安全性,只需將文件與散列一起保存。即:

your.xml 和 your.xml.hash

可以使用System.Security.Cryptography.MD5Managed例如。這只是保存xml文件,然後保存文件本身的散列。閱讀時,只需計算哈希值,與保存的內容進行比較,然後按常規使用xml文件。

當然,xml文件中的信息沒有加密,可以讀取,但是如果您編輯該文件,則哈希將不正確,並且您的程序將發現該嘗試。保持簡單:)

+0

+1的可能重複。這很受歡迎。通常你會想以某種任意的方式修改哈希值,以便使其逆向工程技術變得更加複雜。 – Brian 2010-10-25 18:23:04

+0

同意,但我對此作了保留。最有可能的是,那些可能想要搞砸的用戶不知道如何創建一個新的散列;)如果用戶真的有這方面的知識,那麼,好吧..首先禁用對用戶的寫入權限,爲什麼他們有配置文件的寫入權限? :) – Onkelborg 2010-10-25 18:30:20

3

如果您只是想使其更難修改,請通過DeflateStream發送。作爲一個額外的好處,該文件將更小。

0

我可能只是通過這個包裝了DPAPI的類來運行整個文件,然後再讀/寫它。得到的輸出編碼,因此它可以寫出一個文本文件:

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); 
    } 
}