加密解密技术—Web.config加密和解密

摘要:
正在读取目录1:为什么要加密web.config配置文件中的配置部分?
 

  阅读目录

  一:我们为什么要对web.config配置文件中的配置节加密?

  二:怎么样加密和解密?

  三:实例

  四:运行效果

  一:我们为什么要对web.config配置文件中的配置节加密?

  因为在我们的项目中,有的配置节可能包含敏感信息,我们看下面的<connectionStrings/>配置节中包含了我们连接 数据库的用户名和密码以及IP地址,这要是暴露出去是很危险的,还有<identity/>配置节中包含了运行时使用的模拟账号的用户名和密 码,这些配置节都包含着敏感信息,我们不希望密码以明文的方式存储在配置文件里,所以我们要对其进行加密

  <connectionStrings>
     <add name="LocalHostEPGConnectionStr" connectionString="server=.;database=NewNewEPG;User ID=sa;password=123" providerName="System.Data.SqlClient"/>
  </connectionStrings>

  二:怎么样加密和解密?

  使用SectionIntomation对象可以对web.config进行加密和解密

  如果要加密一个配置节,只需要调用SectionIntomation对象的ProtectSection()方法,传递一个要使用的提供程序的名字来执行加密

  如果要解密一个配置节,当需要解密文件的配置节时,只需要调用SectionIntomation对象的UnprotectSection()方法完成解密

  1:ProtectSection()方法

  此方法对web.config中的配置节进行加密

  语法如下:

  public void ProtectSection(string ProtectProvider)

  参数说明如下:
  ProtectProvider:要使用的保护提供程序的名称,默认下包含以下保护提供程序加密,这个参数必须写已 存在的保护提供程序的名称,比如:“RSAProtectedConfigurationProvider”,不能写“MyName”,否则会报找不到保 护提供程序“MyName”

  1.1:RSAProtectedConfigurationProvider:使用RSA加密算法对数据进行加密和解密

  1.2:DPAPIProtectedConfigurationProvider:使用Windows数据保护API(DPAPI)对数据进行加密和解密

  2:UnprotectSection()方法

  此方法对关联的配置节移除受保护的配置解密

  三:实例

  ConfigurationManager来自命名空间System.Configuration,而 WebConfigurationManager来自命名空间System.Web.Configuration,微软建议:在Web应用程序配置文件的 操作时建议采用WebConfigurationManager ;在客户端配置文件的操作时建议采用ConfigurationManager ,我们都得引用这两个命名空间

  我们最后看到解密后的<connectionStrings/>配置节和未加密前的配置节是一模一样的

  WebConfigEncryptDecrypt.aspx

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.Configuration;
  using System.Configuration;

  namespace EPG.WebAdmin.EncryptDecrypt
  {
      public partial class WebConfigEncryptDecrypt : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {

          }

          /// <summary>
          /// 加密Web.config文件
          /// </summary>
          protected void btnEncrypt_Click(object sender, EventArgs e)
          {
              //得到当前配置文件
              Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
              //得到节部分
              ConfigurationSection section = config.GetSection("connectionStrings");
              //如果节不为空并且这个节没被保护
              if (section != null && !section.SectionInformation.IsProtected)
              {
                  //保护指定的节使用RSA加密算法对数据进行加密和解密
                  section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");

        //保存
                  config.Save();

        RegisterStartupScript("","<script>alert('加密成功!')</script>");
              }
          }

     
          /// <summary>
          /// 解密Web.config文件
          /// </summary>
          protected void btnDecrypt_Click(object sender, EventArgs e)
          {
              //得到当前配置文件
              Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
              //得到节部分
              ConfigurationSection section = config.GetSection("connectionStrings");
              //如果节不为空并且这个节被保护
              if (section != null && section.SectionInformation.IsProtected)
              {
                  //保护指定的节使用RSA加密算法对数据进行加密和解密
                  section.SectionInformation.UnprotectSection();
                  //保存
                  config.Save();
                  RegisterStartupScript("", "<script>alert('解密成功!')</script>");
              }
          }

      }
  }

  四:运行效果

  界面设计

  加密解密技术—Web.config加密和解密第1张

  未加密的<connectionStrings/>配置节

  加密解密技术—Web.config加密和解密第2张

  加密后的<connectionStrings/>配置节

  加密解密技术—Web.config加密和解密第3张

  解密后的<connectionStrings/>配置节

  加密解密技术—Web.config加密和解密第4张

  

免责声明:文章转载自《加密解密技术—Web.config加密和解密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Web前端测试要点解决wepacke配置postcss-loader时autoprefixer失效问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue项目性能优化整理

 以下方式基于 @vue/cli 快速搭建的交互式项目脚手架 1. 路由懒加载 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。 结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载。 1 imp...

Java中判断String不为空的问题性能比较

 function 1: 最多人使用的一个方法, 直观, 方便, 但效率很低. function 2: 比较字符串长度, 效率高, 是我知道的最好一个方法. function 3: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 不推荐使用    以下是三种方法在机器上的运行结果: (机器性能不一, 仅供参考) fu...

system 系统调用、gcc编译过程

system 库函数的功能是执行操作系统的命令或者运行指定的程序 #include <stdio.h> #include <stdlib.h>//引入库 int main() { //system("notepad");//打开记事本 system("dir");//查看目录   system("ipconfig")...

PHP 执行系统外部命令 system() exec() passthru()

PHP中调用外部命令,可以用如下三种方法来实现: 方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec() 1)exec() 原型: string exec( string $command[, array&$output[,...

C#实现JSON序列化与反序列化

JSON(JavaScript Object Notation)——JavaScript对象表示法,是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处理,例如ajax等,是独立于语言和平台的轻量级的数据交换格式。 JSO...

为什么交换机支持ipv6却不能配置?

测试设备是一台Catalyst3750,从思科官网查看Catalyst3750对IPv6的支持情况: Table 7Catalyst 3750, 3560, 3560-C, 2960, 2960-S and 2960-C Switches and Cisco EtherSwitch Service Module Features and the Minim...