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

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

加密配置文件(App.Config和Web.config)中connectionStrings通用方法 Posted on 2015-04-29 17:20 Charles Chen 阅读(...) 评论(...) 编辑 收藏1、 背景:根据项目的要求,需要对配置文件配置的数据库连接字符串进行加密,也就是对ConnectinString节点的内容进行加密存储,同时考虑到代码使用连接字符串不需要进行更改,C#会自动对加密的内容进行解密。

2、需求:因此考虑单独开发一个winform程序,对配置文件进行加密和解密,通过ConfigurationManager中的OpenMappedExeConfiguration方法创建一个Configuration对象,然后在对这个对象中的指定节点进行操作。

遇到的问题:

ConfigurationManager.OpenExeConfiguration("C:\Charles2008.config");这个方法在当前的目录下产生一个副本("C:\Charles2008.config.config"),而且返回的Configuration对象操作的不是Charles2008.config文件,而是程序自动创建的Charles2008.config.config文件,然而如果我把文件Charles2008.config更名为Charles2008.config.config文件或者删除Charles2008.config文件却提示:

加载配置文件时出错:参数“exePath”无效。参数名:exePath 3、解决方法:从网上寻找帮助,发现还真的有和我遇到一模一样的问题,只需要在以上的代码进行稍微一点改动即可,改动后不生成文件副本,直接操作文件,更新也是操作此文件。

//先实例化一个ExeConfigurationFileMap对象,把物理地址赋值到它的ExeConfigFilename属性中;ExeConfigurationFileMapfileMap=newExeConfigurationFileMap();fileMap.ExeConfigFilename=@"C:\Charles2008.config";//再调用fileMap实例化config,这样,操作的文件就是Charles2008.config文件了,也不会产生副本文件Configurationconfig=ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None); 4、加密连接字符串:上面技术难点解决后,根据获取到Configuration对象Config调用以下方法即可对连接字符串进行加密。(仅针对ConectionString节点)

ConfigurationSectionconnectionSection=config.GetSection("connectionStrings");if(connectionSection!=null){connectionSection.SectionInformation.PRotectSection("RSAProtectedConfigurationProvider");config.Save();MessageBox.Show("保存成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}5、备注:

加密和解密在同一台计算机上使用,在加密过程中,使用了一个基于本机的密钥。这就意味着加密和解密必须在同一台计算机上进行,否则将不能解密。同时,在一台计算机上加密的配置,在另一台计算机上将不能正常使用。

连接字符串加密工具

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航