加密配置文件(App.Config和Web.config)中connectionStrings通用方法

    一、 背景:根據項目的要求,須要對配置文件配置的數據庫鏈接字符串進行加密,也就是對ConnectinString節點的內容進行加密存儲,同時考慮到代碼使用鏈接字符串不須要進行更改,C#會自動對加密的內容進行解密。html

    二、需求:所以考慮單獨開發一個winform程序,對配置文件進行加密和解密,經過ConfigurationManager中的OpenMappedExeConfiguration方法建立一個Configuration對象,而後在對這個對象中的指定節點進行操做。數據庫

     遇到的問題:app

  

ConfigurationManager.OpenExeConfiguration( " C:\Charles2008.config ");     

這個方法在當前的目錄下產生一個副本("C:\Charles2008.config.config"),並且返回的Configuration對象操做的不是Charles2008.config文件,而是程序自動建立的Charles2008.config.config文件,然而若是我把文件Charles2008.config改名爲Charles2008.config.config文件或者刪除Charles2008.config文件卻提示:ide

 

加載配置文件時出錯: 參數「exePath」無效。
參數名: exePath

    三、解決方法:從網上尋找幫助,發現還真的有和我遇到如出一轍的問題,只須要在以上的代碼進行稍微一點改動便可,改動後不生成文件副本,直接操做文件,更新也是操做此文件。工具

    // 先實例化一個ExeConfigurationFileMap對象,把物理地址賦值到它的 ExeConfigFilename 屬性中; 
            ExeConfigurationFileMap fileMap =  new ExeConfigurationFileMap(); 
            fileMap.ExeConfigFilename =  @" C:\Charles2008.config "
  
             // 再調用fileMap 實例化 config , 這樣,操做的文件就是Charles2008.config文件了,也不會產生副本文件 
            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

    四、加密鏈接字符串:上面技術難點解決後,根據獲取到Configuration對象Config調用如下方法便可對鏈接字符串進行加密。(僅針對ConectionString節點)post

     

複製代碼
   ConfigurationSection connectionSection = config.GetSection( " connectionStrings ");
                 if (connectionSection !=  null)
                {
                    connectionSection.SectionInformation.ProtectSection( " RSAProtectedConfigurationProvider ");
                    config.Save();
                    MessageBox.Show( " 保存成功! "" 提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
複製代碼

   五、 備註this

    加密和解密在同一臺計算機上使用,在加密過程當中,使用了一個基於本機的密鑰。這就意味着加密和解密必須在同一臺計算機上進行,不然將不能解密。同時,在一臺計算機上加密的配置,在另外一臺計算機上將不能正常使用。加密

     鏈接字符串加密工具spa

 

出處:http://www.cnblogs.com/Charles2008/p/ConfigurationManager_OpenMappedExeConfiguration.htmlcode

相關文章
相關標籤/搜索