ASP.NET web.config中,数据库连接字符串的加密与解密

ASP.NET web.config中,数据库连接字符串的加密与解密。
开始--->运行,输入cmd,接着输入以下内容
加密:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "你的Web项目路径"
解密:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "你的Web项目路径"
.NET为版本的路径自行修改,其中connectionStrings连接字符串的名称。(版本和自己的配置相关联)
connectionStrings>
<add name="Conn" connectionString="server=. ;database=UserDB;integrated security=sspi" />
</connectionStrings>
1.在Dos命令窗口中执行命令:
C:Documents and SettingsAdministrator>C:WINDOWS\Microsoft.NET\Frameworkv2.0.50727\aspnet_regiis -pef "connectionStrings" "E:\sjzb\WebSite1"
2.命令成功完成以后会在C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 中生成一个密钥文件.该文件在不同的机器上是不一样的.在该文件上点右键,选属性,在安全属性页上,将NETWORK_SERVICE组添加进去,给读取权限.
3.如果连接字符串中的用户名和口令需要修改,则用下面的命令将webconfig文件解密.然后重复上面的加密步骤即可
C:Documents and SettingsAdministrator>C:WINDOWS\Microsoft.NET\Frameworkv2.0.50727\aspnet_regiis -pdf "connectionStrings" "E:\sjzb\WebSite1"

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/scugoer/archive/2007/04/24/1579942.aspx

在代码中验证是否已经j加密:

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection configSection = config.GetSection("connectionStrings");
if (configSection.SectionInformation.IsProtected)
...{//如果已经加密,就不用再加密了
configSection.SectionInformation.UnprotectSection();
config.Save();
}
else
...{
configSection.SectionInformation.ProtectSection ("DataProtectionConfigurationProvider");
config.Save();
}

加密后解密出现找不到迷失错误!

我们如果想对web.config的数据库连接字符串进行加密的话,那么这里提供了两个方法。
方法一、
  使用“DataProtectionConfigurationProvider”形式加密,创建test.aspx文件,代码如下:
需要添加引用
using System.Web.Configuration;
using System.IO;
//加密
protected void Button1_Click(object sender, EventArgs e)
  {
  Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
  ConfigurationSection section = config.GetSection("connectionStrings");
  if (section != null && !section.SectionInformation.IsProtected)
  {
  section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
  config.Save();
  }
  }
//解密
  protected void Button2_Click(object sender, EventArgs e)
  {
  Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
  ConfigurationSection section = config.GetSection("connectionStrings");
  if (section != null && section.SectionInformation.IsProtected)
  {
  section.SectionInformation.UnprotectSection();
  config.Save();
  }
  }
总结:此方法很方便,并且很简单,但安全性没有密钥加密高。
方法二、
使用“RSAProtectedConfigurationProvider”形式来加密
test.aspx程序文件基本如上,

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
改成
section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
但这个时候你访问网站的时候很有可能会出现
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 
分析器错误信息: 未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。
这样的错误,解决方法是:
进dos运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
  如果运行出错,需要把目录 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 放入环境变量path中。
  此时就可以成功访问网站了。
  同样可以通过命令行来实现“RSAProtectedConfigurationProvider”加密
  注意:你也可以不运行 aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"命令来注册默认的 RsaProtectedConfigurationProvider 的RSA 密钥容器
  方法如下:
  1)创建一个可导出的rsa密钥容器,命名为Key
aspnet_regiis -pc "Key" -exp
2)在你要加密的信息前面指定密钥容器,如:
<configProtectedData> 
  <providers> 
  <clear /> 
  <add name="KeyProvider" 
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
keyContainerName="Key" 
useMachineContainer="true"/> 
  </providers> 
</configProtectedData> 
<connectionStrings> 
  <add name="SQLConnString" connectionString="Data Source=yourIP;Initial Catalog=test;User Id=yourID;Password=yourPassword;" 
  providerName="System.Data.SqlClient" /> 
</connectionStrings>
并且确保在configuration节的xmlns属性有如下值:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
3)对配置文件进行加密
aspnet_regiis -pef "connectionStrings" "E:\project\Test" -prov "KeyProvider"
参数分别为:需要加密的配置节、项目所在目录的物理路径、加密所使用的密钥容器名称
再看web.config文件,就会发现connectionStrings节已经被加密了,但是运行程序会发现程序仍然可以正确访问数据库。
此时,只需运行:
aspnet_regiis -pdf "connectionStrings" "E:\project\Test"
就可以对web.config文件进行解密。
(注意,如果还是有错误,那可能是您没有给生成的密匙文件足够的权限,去到 C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 目录下,
  找到刚生成的密匙文件,把network service用户的读取权限赋予给它,就可以了,直接用命令的话也可以:命令如下 aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE" ,可能需要重新启动iis)
4)把密钥容器导出为xml文件
aspnet_regiis -px "Key" "e:\Key.xml"
这个命令只导出公钥,因此以后只能用于加密,而无法解密。
aspnet_regiis -px "Key" "e:\Keys.xml" -pri
这个则连私钥一起导出了,所以我们要用这个。
5)把密钥容器删除
aspnet_regiis -pz "Key"
删除后再运行程序,会提示出错:
分析器错误信息: 未能使用提供程序“KeyProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。
同理可以证明,在任何一台未安装正确的密钥容器Key的机器上,程序都无法对connectionStrings节进行解密,因此也就无法正常运行。
6)导入key.xml文件
aspnet_regiis -pi "Key" "e:\Keys.xml"
此时,再运行程序会发现又可以解密了。证明加密与解密机制运行正常。
最后说一下这个机制所提供的安全性保障可以运用在什么方面:
对winform程序的app.config进行加密实际意义并不大,因为无论如何,客户机都可以通过运行aspnet_regiis -pdf 来对配置文件进行解密,从而暴露敏感信息。
对于web.config进行加密的意义也仅限于,当web.config文件不小心泄露时,不会同时泄露敏感信息,如果恶意攻击者已经取得了在服务器上运行程序的权限,那么同app.config一样,可以很容易通过通过运行aspnet_regiis -pdf 获取明文了。
还有,通过aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE"控制对不同用户对密钥容器的访问权限,应该还可以进一步获取一些安全性,比如可以控制某些用户即使登录到服务器上,也无法用aspnet_regiis -pdf对配置文件进行解密。
引用地址:http://blog.csdn.net/shanliwa/archive/2008/03/13/2176640.aspx

web config数据库连接字符串加密的更多相关文章

  1. asp.net web.config数据库连接字符串加密与解密

    在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序并重新将其编译.最好的解决方法 ...

  2. 加密,解密web.config数据库连接字符串

    "connectionStrings" 路径是web.config所在的工程目录. 1.加密EncryptWebConfig.bat @echo offC:\Windows\Mic ...

  3. web.config数据库连接字符串

    我们在做VB数据库经典实例这本书上的五个小例子和做学生信息管理系统时,都需要通过Vb链接数据库,在众多的链接方式中connectionstring字符串应该是较为简单的一种方式,下面我来详细介绍它的一 ...

  4. 对web.config的ConnectionString加密

    原文:对web.config的ConnectionString加密 本文参考了wayshan的博客,原文地址:http://www.cnblogs.com/wayshan/archive/2012/0 ...

  5. 采用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)对web.config实行本地加密

    加密原因:我们通常将一些重要的配置信息写在Web.config里面,其中数据库链接就是这样的信息.将这些数据直接明文显示,显然不太安全. 工具: 采用ASP.NET IIS 注册工具 (Aspnet_ ...

  6. 使用Aes对称加密解密Web.Config数据库连接串

    现在很多公司开始为了保证数据库的安全性,通常会对Web.Config的数据库连接字符串进行加密.本文将介绍学习使用Aes加密解密数据库连接字符串.本文采用MySql数据库. AES概念简述 AES 是 ...

  7. web.config连接字符串的一些总结

    阅读目录: DS01:数据库连接字符串的两种写法 DS02:数据库连接字符串的内容 DS01:数据库连接字符串的两种写法 1.连接字符串的两种写法: <configuration>   & ...

  8. 关于IBatisNet的配置文件中数据库连接字符串加密处理

    我们通常在IBatisNet配置文件 properties.config 加入数据库连接字符串.数据库连接字符串直接放在里面,没有被加密,很不安全.如果我们把 properties.config 文件 ...

  9. web.config 数据库连接

    方法一:connectionsStrings 首先配置web.config文件 <configurations> <connectionStrings> <add nam ...

随机推荐

  1. 用Java Servlets代替CGI

    从网络的早期阶段开始,人们就希望他们的网络服务器不仅能够显示静态文档,通用网关接口(CGI) 扩展了服务器的能力,但其代价是增加了额外的处理进程.FastCGI则把外部CGI 处理进程同网络服务器更紧 ...

  2. SQL Server:把CSV文件导入到SQL Server表中

    有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...

  3. 图表框架HelloCharts(3)饼状图

    1 效果图 2 xml文件 activity_pie_chart.xml <FrameLayout xmlns:android="http://schemas.android.com/ ...

  4. I.MX6 Power off register hacking

    /*********************************************************************** * I.MX6 Power off register ...

  5. datatables 参数详解(转)

    //@translator codepiano //@blog codepiano //@email codepiano.li@gmail.com //尝试着翻译了一下,难免有错误的地方,欢迎发邮件告 ...

  6. Android studio 下JNI编程实例并生成so库

    Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...

  7. border-radius 在安卓手机竟然不完美支持

    如果给图片加了width:50px;height:50px;border-radius:25px;-webkit-border-radius:25px;border:3px solid #fff; 在 ...

  8. 向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误

    错误信息的弹出框

  9. c# Chart设置样式

    一.chart属性熟悉 能够对C# chart控件属性熟悉起帮助的code, 现在分享给大家,Chart Operate Demo Code Download,如有帮助,别忘点个赞. Chart    ...

  10. .net 接口返回json格式示例

    1.新建 InterfaceTestPro1 项目: FILE - New - Project... - Web - ASP.NET Web Forms Application name:Interf ...