关于配置文件的节点内容加密(备忘)

在这里呢,将要介绍一种加密 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,

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

原文地址:https://www.cnblogs.com/Jaryleely/p/1783185.html