图解asp.net数据库连接字符串加密和aspnet_regiis

本文详细介绍如何使用ASP.NET加密和解密Web.config文件中的连接字符串。提供了两种方法:一是通过命令行工具aspnet_regiis.exe进行操作;二是通过编程方式使用RSAProtectedConfigurationProvider或DataProtectionConfigurationProvider。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 使用aspnet_regiis加密数据库连接字符串

项目在C:\sl2\28\ShoppingCart\

加密前;



此次加密使用的命令;



加密后;数据库名,用户名,口令,都看不到了;



代码中照常读取,.net会自行解密,不必自己写代码解密;


二 aspnet_regiis.exe用法


C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe

aspnet_regiis.exe [-i[r] [-enable] | -u[a] | -r | -s[n] <path> | -k[n] <path> | -lv | -lk | -c | -e[a] | -?]

-i - 安装 ASP.NET 的此版本,并更新 IIS 元数据库根处的
脚本映射和根以下的所有
脚本映射。现有的低版本脚本映射
升级到此版本。
说明:使用“aspnet_regiis.exe -i”命令可以重新安装ASP.NET,如果ASP.NET出了什么问题,一般用这个命令都能解决。

-ir - 安装 ASP.NET 的此版本,仅注册。不
更新 IIS 中的脚本映射。

-enable - 带 -i 或 -ir 指定 -enable 时,还将
在 IIS 安全控制台(IIS 6.0 或更高版本)中启用 ASP.NET。

-s <path> - 在指定的路径以递归方式安装此版本
的脚本映射。现有的低版本脚本映射
升级到此版本。
例如 aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1

-sn <path> - 在指定的路径以非递归方式安装此版本的
脚本映射。现有的低版本脚本映射
升级到此版本。

-r - 为 IIS 元数据库根位置的此版本
以及根以下的所有脚本映射安装脚本映射。不论当前版本是什么,
所有现有的脚本映射都
更改为此版本。

-u - 卸载 ASP.NET 的此版本。到此版本的
现有脚本映射重新映射到此计算机上安装的
其余的最高 ASP.NET 版本。

-ua - 卸载计算机上的所有 ASP.NET 版本

-k <path> - 从指定的路径中以递归方式移除到任何 ASP.NET 版本的所有
脚本映射。
例如 aspnet_regiis.exe -k W3SVC/1/ROOT/SampleApp1

-kn <path> - 从指定的路径中以非递归方式移除到任何 ASP.NET 版本的所有
脚本映射。

-lv - 列出计算机上安装的所有
ASP.NET 版本(包括状态和安装路径)。
Status: Valid[ (Root)]|Invalid

-lk - 列出包含 ASP.NET 脚本映射的所有 IIS 元数据库项的所有路径
(连同版本一起)。不显示从父项
继承 ASP.NET 脚本映射的项。

-c - 将客户端脚本的此版本安装到
每个 IIS 站点目录的 aspnet_client 子目录中。
说明:如果提示缺少js脚本文件,就使用“aspnet_regiis.exe -c”命令。
-e - 从每个 IIS 站点目录的 aspnet_client 子目录中
移除客户端脚本的此版本。

-ea - 从每个 IIS 站点目录的 aspnet_client 子目录中
移除客户端脚本的所有版本。

-? - 打印此帮助文本。


三 利用ASP.NET加密和解密Web.config中连接字符串

http://www.cnblogs.com/mmbo/archive/2010/08/25/1808138.html

介绍

这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串

背景描述

在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, Ajax, JavaScript等的文章。大多数情况下,我都把数据库的连接字符串放在了web.config中。其中包含许多敏感信息,包括连接数据库的用户名密码等。然而我们在web.config和machine.config中以纯文本的方式保存密码安全吗?

如果我们的程序只是部署在内部服务器中,这应该没什么问题。但如果我们的程序是运行在共享主机上面,那我们应该提高安全等级了。ASP. NET 2.0提供了一个保护配置模型来加密和解密web.config中sections信息。RSAProtectedConfigurationProvider:默认通过RSA公钥来加密和解密。

通过在命令行中工具运行aspnet_regiis.exe命令,可以对web.config中的连接串进行加密和解密。

第一种方式

首先,我们通过在windows命令行中执行aspnet_regiis.exe来加密与解密。

在VS中创建一个新的websit项目,打开web.config,加入数据库连接串,如:

然后我们按下面的步骤来加密和解密数据连接串

 <connectionStrings>
    <add name="dbconnection" connectionString="Data Source=RahulMittal;Integrated Security=true;Initial Catalog=MySampleDB"/>
  </connectionStrings >
1. 开始菜单>>所有程序>>Microsoft visual studio 2008 >> Visual Studio Tools >> Visual Studio 2008 开发人员命令提示(如果是windows7,点右键与管理员身份运行)

2. 在命令窗口中,输入命令 aspnet_regiis.exe -pef "connectionStrings" "C:\VisualStudio2008\Authorization"

 –pef表明程序是以文件系统的形式建立的。第二个“connectionStrings”是你要加密的configuration 节点名字。第三个参数指名 web.config的物理路径。

3. 成功执行命令后会显示:加密成功。

现在,再打开程序中的 web.config,会变成像下面这样子了。

复制代码
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
    xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>ZNUbIEnOwlZzC8qbzHj5F2GS9gLYSkWCIgCJGkrgZAX8A+8oEIssyohhxUKvAubD3jizFc5IjbLGt7HNXhoFhXNTUPYz2y6tdKJDVgDmtCgVf8Z2C990zoMRBJG+VXhmgnlo1vtHYhGx8x/bBzE1prT1+xDpep98vHF22d+LrVI=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>tODWlPD0Q/B/mP14GQ/5tUxcjmhHcy9a0oPunV5osNrMQRztgi2h5V6sxJOEh+NC+G9gQNkv1huXf1s7eoZRRLy5/LDtLXzzqMUOqLSlJUs9igChvi33c9XG4rwGF15Tpn4N34bpQBt94n0rpSkQ18V9HCPzii+UO64PlA+ykDeQhc9aQr4gO3mCfUzmY2S9gsXzRbzdq0oCWBDvx8UkX2uDxaysVHC9Fo7u6IrlpU0+hOdK95Y3/A==</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
复制代码
我们在程序中并不要写任何代码来解密连接字符串,因为.NET会自动的为我们解密。如果我们要用连接字符串,可以像平常那样调用.

string strconnection = ConfigurationManager.AppSettings["dbconnection"].ToString();
如果我们想解密,只需要在VS的命令窗口中,输入aspnet_regiis.exe -pdf "connectionStrings" "C:\VisualStudio2008\Authorization"
成功执行后,会显示解密成功。
再打开web.config,我们可以看到解密后的字符串。

现在,我们知道了如何在文件系统中加密和解密连接字符串。如果我们想加密运行在IIS上的默认网站,就像IE上展示的那样,可以用下面的命令。

加密IIS默认网站的web.config

aspnet_regiis.exe -pe "connectionStrings" -app "/SampleWebSite"
-pe说明程序是运行在IIS上的。第二个参数指名要加密的configuration节点。-app用来指定虚拟目录,最后一个参数就是程序部署的虚拟目录名。

 Decrypt connectionStrings in web.config of IIS based site

解密IIS默认网站上的web.config

aspnet_regiis.exe -pd "connectionStrings" -app "/SampleWebSite"
到这里我们知道如何用命令行工具执行aspnet_regiis.exe命令来加密和解密web.config了。下面我将介绍如何在后台代码中来加密解密web.config。

第二种方式

在第二种方法中我会用RSAProtectedConfigurationProvider和DataProtectionConfgurationProvider来加密解密web.config

首先,打开Default.aspx,添加如下代码:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">
    <head  runat="server">
      <title>Untitled Page</title>
    </head>
    <body>
      <form id="form1"  runat="server">
        <div>
          <asp:Button id="btnEncrypt" runat="server" Text="Encrypt" onclick="btnEncrypt_Click" />
          <asp:Button ID="btnDecrypt" runat="server" Text="Decrypt" onclick="btnDecrypt_Click" />
        </div>
      </form>
    </body>
  </html>
复制代码
打开后台代码,添加下列命名空间:

using System;
using System.Configuration;
using System.Web.Configuration;
再添加如下代码

复制代码
string provider = "RSAProtectedConfigurationProvider";
string section = "connectionStrings";
protected void Page_Load(object sender, EventArgs e)
{
 
}
protected void btnEncrypt_Click(object sender, EventArgs e)
{
   Configuration confg = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
   ConfigurationSection configSect = confg.GetSection(section);
   if (configSect != null)
   {
      configSect.SectionInformation.ProtectSection(provider);
      confg.Save();
   }
}
 
protected void btnDecrypt_Click(object sender, EventArgs e)
{
   Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
   ConfigurationSection configSect = config.GetSection(section);
   if (configSect.SectionInformation.IsProtected)
   {
      configSect.SectionInformation.UnprotectSection();
      config.Save();
   }
}
复制代码
完成之后,打开web.config,添加数据库连接字符串

 <connectionStrings>
    <add name="dbconnection" connectionString="Data Source=RahulMittal;Integrated Security=true;Initial Catalog=MySampleDB"/>
  </connectionStrings >
现在运行程序并点击加密按钮之后,再打开web.config,会变成下面那样:

复制代码
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
    xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>WagJ9DDjWTNc1nmYVNQXaQqXalQzXaiCHAOtUJvTWBRZiuT6UK1fBElM80PnL6dC5Umb8qvfHdkSMgoMW9CJzwOTZ0zTy17JBGZqRQmlfW2G9LacoWIil0UrxjhgmJmRXhwXHFpdGwEVl7AoQGVlJGabXuChutaTxmfGOoUbCr0=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>qry5qnr3qxOgyoNPeP7OKEiHpr/PPTsaeQ2mYUsSK7cg4Kkl9uPO4RyUXgBIkgCTsjbObqLlyndcSBnYyek6bxG/IBL82G1R5J1ci8i1eyt8kIDqouzYOx5vtouErld4z1L+7WGf9Wg37QAH5RiiEfkCHndJJq3dTqjxnnXZSno6NgbxSXDfqzwE/eKDVhGV3oaTQSfjVmO8e5a9wvREYeeyasDhojx8J2mdy7/Q9rEIpv98RTiRxA==</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
复制代码
如果我们想用DataProtectionConfigurationProvider来实现加密与解密,只需在代码中将RSAProtectedConfigurationProvider替换成DataProtectionConfigurationProvider即可。

原文:http://www.codeproject.com/Tips/304638/Encrypt-or-Decrypt-Connection-Strings-in-web-confi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值