zoukankan      html  css  js  c++  java
  • 关于配置文件的节点内容加密(备忘)

    在这里呢,将要介绍一种加密 web.config 文件中节的方法,

    就是 DPAPI 也就是使用 DataProtectionConfigurationProvider 来实现,

    其实呢,还有一种加密的算法,叫做 RSA 加密算法,

    不过在实现上这个 RSA 和 DPAPI 差不多,

    所以只要注意看一下代码就 OK 了,

    DPAPI 是使用的 Windows Data Provider API 来实现加密和解密的,

    其中的 Provider 字符串为 DataProtectionConfigurationProvider,

    而 RSA 的 Provider 字符串为 RSAProtectedConfigurationProvider,

    对于 RSA ,其在 MSDN Library 中有一个非常详细的例子,

    不懂得可以去看一下,

    这一次呢,

    主要是讲一下如何对 web.config 中的 appSettings 和

    connectionStrings 实现加密和解密,

    其实呢,这两个在加密和解密的实现上根本没有区别,

    您只需要在 web.config 中获取这两个节就可以来加解密了,

    还是直接看代码和效果比较实在

    using System; 
    using System.Web.Configuration; 
    using System.Configuration; 
    
    namespace WebForm 
    { 
        public partial class Demo__1 : System.Web.UI.Page 
        { 
            protected void Page_Load(object sender, EventArgs e) 
            { 
    
            } 
    
            //使用 DPAPI 加密 appSettings 
            protected void btnAddApp_Click(object sender, EventArgs e) 
            { 
                //Request.ApplicationPath 
                //获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。 
                //当前应用程序的虚拟路径。 
                //开启 Request.ApplicationPath 应用程序所在的 web.config 文件 
                Configuration config = WebConfigurationManager. 
                      OpenWebConfiguration(Request.ApplicationPath); 
                //获取 web.config 中的 appSettings 区块 
                ConfigurationSection configSection = 
                    config.GetSection("appSettings"); 
               //如果这个区块还没有被加密 
                if (!configSection.SectionInformation.IsProtected) 
                { 
                    //进行加密操作 
                    configSection.SectionInformation. 
                        ProtectSection("DataProtectionConfigurationProvider"); 
                   //将加密的结果保存回 web.config 文件中 
                    config.Save(); 
                    lblMsg.Text = "AppSettings 使用 DPAPI 加密成功!!!"; 
                } 
                else 
                { 
                    lblMsg.Text = "AppSettings " + 
                        "已经被 DPAPI 加密了,此次加密操作被取消!!!"; 
                } 
            } 
    
           //使用 DPAPI 加密 connectionStrings 
            protected void btnAddCon_Click(object sender, EventArgs e) 
            { 
                //Request.ApplicationPath 
                //获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。 
                //当前应用程序的虚拟路径。 
                //开启 Request.ApplicationPath 应用程序所在的 web.config 文件 
                Configuration config = WebConfigurationManager. 
                      OpenWebConfiguration(Request.ApplicationPath); 
                //获取 web.config 中的 appSettings 区块 
                ConfigurationSection configSection = 
                    config.GetSection("connectionStrings"); 
                //如果这个区块还没有被加密 
                if (!configSection.SectionInformation.IsProtected) 
                { 
                   //进行加密操作 
                    configSection.SectionInformation. 
                        ProtectSection("DataProtectionConfigurationProvider"); 
                    //将加密的结果保存回 web.config 文件中 
                    config.Save(); 
                    lblMsg.Text = "ConnectionStrings 使用 DPAPI 加密成功!!!"; 
                } 
                else 
                { 
                    lblMsg.Text = "ConnectionStrings " + 
                        "已经被 DPAPI 加密了,此次加密操作被取消!!!"; 
                } 
            } 
    
           //进行解密 
            protected void btnSub_Click(object sender, EventArgs e) 
            { 
                Configuration config = WebConfigurationManager. 
                    OpenWebConfiguration(Request.ApplicationPath); 
                ConfigurationSection configAppSection = 
                    config.GetSection("appSettings");  
                if (configAppSection.SectionInformation.IsProtected) 
                { 
                    //在解密时,并不需要区分是 DPAPI 加密的还是 RSA 加密的 
                    //其均会自行解密 
                    configAppSection.SectionInformation.UnprotectSection(); 
                    config.Save(); 
                    lblMsg.Text = "解密成功!!!"; 
                } 
                else 
                { 
                    lblMsg.Text = "该区块暂时还没有被加密,所以无需解密!!!"; 
                } 
    
                ConfigurationSection configConSection = 
                    config.GetSection("connectionStrings"); 
    
                if (configConSection.SectionInformation.IsProtected) 
                { 
                    configConSection.SectionInformation.UnprotectSection(); 
                    config.Save(); 
                    lblMsg.Text = "解密成功!!!"; 
                } 
                else 
                { 
                    lblMsg.Text = "该区块暂时还没有被加密,所以无需解密!!!"; 
                } 
            } 
        } 
    }
    
    
    

    以上就是所有的 Code-Behind 了

    看截图吧

    加密前的 appSettings 和 connectionStrings

     

    对 appSettings 加密后

     

     

    再在对 appSettings 加密的基础上对 connectionStrings 加密

     

     

    以上就是对 appSettings 和 connectionStrings

    使用 DPAPI 加密后的结果

    然后再对 appSettings 和 connectionStrings 解密

     

     

    以上就是使用 DPAPI 加密的过程了,

    实质上还可以使用一种方法,也就是 RSA 加密,

    使用这种方式加密其实和 DPAPI 加密方式差不多,

    您只需要在加密时,把上面的 Provider 参数字符串由

    DataProtectionConfigurationProvider

    改为 RSAProtectedConfigurationProvider 就 OK 了,

    感兴趣的可以去试试,还有就是推荐一下 MSDN Library 中的那个 Demo,

    也蛮好的,自己去找找看吧。 

  • 相关阅读:
    校软第二次考核11.11
    计算机视觉入门live笔记
    大数阶乘题解
    校软招新考试 原卷 题解
    校软件班招新考试A卷 题解
    【好题】最短路变形+dp——ICPC NCNA 2018G
    贪心/二分——cf1342D
    思维+贪心+dp——cf1341D
    【经典】容斥+排列组合——cf1342E
    计算几何+求质心+求多边形与圆交面积——ICPC GNYR 2019
  • 原文地址:https://www.cnblogs.com/Jaryleely/p/1783185.html
Copyright © 2011-2022 走看看