惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
博客园_首页
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
博客园 - 司徒正美
有赞技术团队
有赞技术团队
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog

博客园 - Charles Chen

.Net Framework 4.x 程序到底运行在哪个 CLR 版本之上(ZT) C#常用工具类——Excel操作类(ZT) C#程序以管理员权限运行(ZT) why happen "WaitHandles must be less than or equal to 64" fsn文件解析(C#) MS SQL执行大脚本文件时,提示“内存不足”的解决办法() OLDB读取excel的数据类型不匹配的解决方案(ZT) WinForm中使用XML文件存储用户配置及操作本地Config配置文件(zt) 理解DllImportAttribute中的属性 Winform中消息循环、异步操作、Control.Invoke&Control.BeginInvoke学习 Winform打包程序制作的快捷方式指向错误的位置(指向安装包文件) Reflector导出.NET工程项目的修复 存储过程返回值及输出参数笔记 使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000)(ZT) SQL字符串的分组聚合(ZT) SQL中使用update inner join和delete inner join (ZT) C# ComboBox(DropDownList)数据绑定后,怎样再添加选项(ZT) 项目维护之WinXP IIS中HTTP500的来龙去脉 一次项目维护案例而对事务学习的笔记
加密配置文件(App.Config和Web.config)中connectionStrings通...
Charles Chen · 2015-04-29 · via 博客园 - 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 属性中; 
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
            fileMap.ExeConfigFilename = @"C:\Charles2008.config"
  
            //再调用fileMap 实例化 config , 这样,操作的文件就是Charles2008.config文件了,也不会产生副本文件 
            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

    4、加密连接字符串:上面技术难点解决后,根据获取到Configuration对象Config调用以下方法即可对连接字符串进行加密。(仅针对ConectionString节点)

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

   5、 备注

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

     连接字符串加密工具