2014-02-25 53 views
1

網站here(如下所示)上的代碼加密app.config。我按下了一個按鈕來加密我的配置。加密配置

當我要運行代碼 - (例如在應用程序啓動時,如果它尚未加密)? 在我的bin文件夾中,我有2個xml配置文件(Applicationname.exe.config和Applicationname.vshost.exe - 此代碼僅對它們中的第一個進行加密 - 當我部署我的程序時,我如何確保我的客戶沒有意外獲得的解密文件還因爲這將是一個重大的問題?(或者根本保證這個Windows安裝程序照顧)?

C#代碼

Configuration config = ConfigurationManager.OpenExeConfiguration(
    ConfigurationUserLevel.None); 

SectionInformation appSettingsSecInfo = config.GetSection(
    "appSettings").SectionInformation; 
if (!appSettingsSecInfo.IsProtected) 
{ 
    Console.WriteLine("The configuration file has NOT been protected!"); 

    // Encrypt this section by using security provider 
    // (RsaProtectedConfigurationProvider or DpapiProtectedConfigurationProvider). 
    appSettingsSecInfo.ProtectSection("RsaProtectedConfigurationProvider"); 
    appSettingsSecInfo.ForceSave = true; 

    config.Save(ConfigurationSaveMode.Full); 
} 
+1

我相信我是正確的,你說你需要在安裝應用程序時運行它,因爲所使用的加密是特定於計算機的。在PC上加密會導致一個配置文件無法在另一臺PC上讀取。 –

+0

聽起來像它可能會打破等方法 - 我會回去看看是否有一個更簡單的方法。我無法冒密碼開放的風險。謝謝您的幫助。 – user1438082

回答

1

請按照步驟在this page。的作者你引用的代碼片段也提到了這個頁面,但是他錯了,它不適用於app.config文件。 do是將yourapp.exe.config文件重命名爲web.config,對所需的部分進行加密並將其重命名爲yourapp.exe.config。

現在你的情況。我引用的頁面還指出以下內容:

您可以輕鬆地從服務器導出和導入RSA密鑰到服務器。這使RSA加密對加密Web場中多個服務器上使用的配置文件特別有效。

它有一個關於導出和導入RSA密鑰的部分。

因此,您可以加密PC上的配置,導出用於加密的RSA密鑰並將其放入安裝程序。然後安裝人員將RSA加密密鑰導入到正在部署應用程序的PC上的機器或用戶存儲中。

但是您應該認識到,當應用程序啓動時,加密配置必須使用RSA加密密鑰的私有部分(我們導入的或源自PC的)進行解密。因此,如果應用程序可以訪問私鑰,客戶也可以訪問(我假定客戶可以通過應用程序訪問PC)。你可以做的是使用用戶的密鑰容器,只有應用程序將在RSA加密密鑰下運行,但如果客戶擁有管理員權限,則不能禁止他解密配置。

這麼多標準解決方案。但是您可以將敏感數據始終放在自定義xml文件中,對其進行加密並將加密密鑰編譯到您的應用程序中。然後應用程序必須實現一個邏輯來解密xml本身。客戶必須反編譯您的應用程序才能獲得RSA加密密鑰。