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


        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、 备注

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

         连接字符串加密工具

    出处:http://www.cnblogs.com/Charles2008/p/ConfigurationManager_OpenMappedExeConfiguration.html

  • 相关阅读:
    从零一起学Spring Boot之LayIM项目长成记(五)websocket
    从斐波那契数列看递归和尾递归
    通讯框架 t-io 学习——websocket 部分源码解析
    通讯框架 t-io 学习——给初学者的Demo:ShowCase设计分析
    从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解
    从零一起学Spring Boot之LayIM项目长成记(三) 数据库的简单设计和JPA的简单使用。
    从零一起学Spring Boot之LayIM项目长成记(二) LayIM初体验
    从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot
    初始Turtle
    python介绍
  • 原文地址:https://www.cnblogs.com/mq0036/p/9590259.html
Copyright © 2020-2023  润新知