ASP.NET温故而知新学习系列之网站安全技术—Web.config加密和解密(一)
来源:互联网 发布:电魂网络 经营理念 编辑:程序博客网 时间:2024/04/29 16:19
阅读目录
一:我们为什么要对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>");
}
}
}
}
四:运行效果
界面设计
未加密的<connectionStrings/>配置节
加密后的<connectionStrings/>配置节
解密后的<connectionStrings/>配置节
- ASP.NET温故而知新学习系列之网站安全技术—Web.config加密和解密(一)
- ASP.NET温故而知新学习系列之加密解密技术—对称算法加密(一)
- ASP.NET温故而知新学习系列之网站安全技术—预防脚本攻击(二)
- ASP.NET温故而知新学习系列之网站安全技术—加强页面间传值的安全性Convert.ToBase64String(三)
- asp.net web.config加密和解密
- ASP.NET 程序安全性 (一) web.config加密与解密
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—ASP.NET请求的处理过程(一)
- ASP.NET加密和解密Web.config中数据库连接字符串
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—HttpModule(二)
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—HttpHandler(三)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程临界区(八)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)
- 利用ASP.NET加密和解密Web.config中连接字符串
- ASP.NET温故而知新学习系列之ASP.NET中的状态—基于服务器端的状态管理Session(二)
- ASP.NET温故而知新学习系列之ASP.NET中的状态—基于服务器端的状态管理Session(二)
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—1-线程机制
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—多线程查询数据库记录
- asp.net 安全认证学习(一)-web.config 配置
- 二分法查找
- tomcat介绍
- ADO笔记
- $.ajax()方法详解
- 第一周,后台取数据做成表单highchart图到freemarker页面,ajax操作
- ASP.NET温故而知新学习系列之网站安全技术—Web.config加密和解密(一)
- 【spring框架】(二)控制反转(IOC)容器
- 将apache添加为Linux系统自启动服务
- 2015.7.26-2015.7.31意大利米兰IGARSS-2015之行
- js实现设置首页和加入收藏详细版
- linux命令之locate
- BZOJ 2908 又是nand Link-Cut-Tree
- 时间转换 MJD & UTC
- jQuery获取多种input值的方法