加密配置文件(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

相关文章
相关标签/搜索