`
pingguopingguo
  • 浏览: 1488 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多
介绍

这篇文章我将介绍如何利用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即可。
分享到:
评论

相关推荐

    C# ASP.NET - 加密解密Web.config文件

    总结来说,C# ASP.NET提供的加密解密机制为Web.config文件的安全提供了有力保障。通过合理使用`SectionInformation`类的方法,我们可以对敏感配置信息进行加密,从而防止未授权访问,同时在需要时解密以正常运行应用...

    【ASP.NET编程知识】ASP.NET web.config中 数据库连接字符串加密解密.docx

    ASP.NET Web.config 中数据库连接字符串加密解密 ASP.NET 编程语言中,Web.config 文件是用于存储应用程序配置信息的文件之一。在这个文件中,我们通常会存储数据库连接字符串,但这些字符串中包含敏感信息,如...

    ASP.NET-web.config中-数据库连接字符串加密解密.doc

    ASP.NET-web.config中-数据库连接字符串加密解密.doc

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

    对于.NET应用程序而言,保持web.config文件的安全性是十分重要的,因此掌握如何利用aspnet_regiis.exe工具加密和解密web.config中的连接字符串对于Web开发者来说是一个不可或缺的技能。 在操作时,应当确保操作者的...

    c_加密Web.Config中的连接字符串

    本文将深入探讨如何在ASP.NET应用程序中,利用Web.Config文件对数据库连接字符串进行加密与解密的过程。 ### Web.Config 文件的重要性 Web.Config是ASP.NET应用的核心配置文件,它存储了应用程序运行所需的大量...

    Asp.net WebConfig加密解密.rar

    案例通过利用微软提供的方式(RSAProtectedConfigurationProvider和DataProtectionConfgurationProvider)对Web.Config 中的数据库连接字符串进行加密和解密操作

    Web.Config中的连接字符串的加密与解密

    本文将详细介绍如何使用两种加密提供者:`RsaProtectedConfigurationProvider` 和 `DataProtectionConfigurationProvider` 对`Web.Config`中的连接字符串进行加密与解密。 #### 加密提供者 在ASP.NET 2.0中,有两...

    web.config加密解密工具(三个软件集合)

    在IT行业中,尤其是在Web开发领域,`web.config`文件是一个至关重要的配置文件,它用于存储ASP.NET应用程序的各种配置信息,如数据库连接字符串、身份验证设置、URL重写规则等。当这些信息涉及到安全性,比如数据库...

    .Net Framwork自带的工具Aspnet_regiis加密解密web.config

    标题中的".Net Framework自带的工具Aspnet_regiis加密解密web.config"是指在.NET Framework环境下,开发者可以利用一个名为`aspnet_regiis.exe`的命令行工具来对Web应用程序的`web.config`配置文件进行加密和解密...

    ASP.NET网站给wed.config加密解密,只要放到网站wed.config同一目录下即可运行

    在ASP.NET中,`web.config`文件是每个应用程序的核心配置文件,它存储了诸如连接字符串、身份验证设置、授权规则等敏感信息。为了保护这些信息不被未经授权的用户查看或修改,开发者有时会选择对`web.config`文件...

    asp.net (C#) Web.configer加密码

    ASP.NET(C#)Web.config配置文件加密是一个重要的安全措施,用于保护应用程序的敏感信息,如数据库连接字符串、API密钥和其他身份验证凭据。在ASP.NET应用中,Web.config是一个XML文件,存储了应用程序的配置信息。...

    web.config本地加密解密方法.txt

    web.config是ASP.NET应用程序的核心配置文件,存储着应用的各种设置,包括连接字符串、应用程序路径等敏感信息。为了保护这些信息不被未授权访问,.NET框架提供了多种加密机制。 ### 一、使用`aspnet_regiis.exe`...

    web.config的数据库连接字符串进行加密[文].pdf

    本文将详细介绍如何使用`aspnet_regiis.exe`工具加密和解密`web.config`文件中的数据库连接字符串,并提供具体的步骤和示例。 #### 二、加密原理概述 `aspnet_regiis.exe`是Microsoft提供的一个命令行工具,用于...

    asp.net 禁用viewstate在web.config里

    您可能感兴趣的文章:详解ASP.NET配置文件Web.configasp.net代码中修改web.config节点的具体方法ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法asp.net web.config加密解密方法ASP.NET(C#)应用...

    web.config加密解密

    在 ASP.NET 应用程序开发过程中,`web.config` 文件是整个项目的核心配置文件之一,它包含了应用程序运行所需的各项配置信息,例如数据库连接字符串、应用程序设置等敏感信息。为了保护这些敏感数据不被未经授权的人...

    WEBCONFIG数据库链接加密解密算法

    WebConfigEncryptDecrypt.aspx和WebConfigEncryptDecrypt.aspx.cs这两个文件很可能是一个简单的ASP.NET Web应用程序,用于实现Web.config文件中数据库连接字符串的加密和解密功能。WebConfigEncryptDecrypt.aspx可能...

    C# Web.Config 加密与解密 3

    在.NET框架中,Web.config文件是ASP.NET应用程序的配置文件,它存储了应用程序的各种设置,如数据库连接字符串、身份验证模式、授权规则等敏感信息。为了保护这些信息不被未授权的用户查看或修改,我们可以对Web....

    web.config加密与解密

    在ASP.NET开发环境中,`web.config`文件是一个至关重要的配置文件,它包含了应用程序的各种设置,如数据库连接字符串、身份验证模式、授权规则等敏感信息。为了保护这些信息不被未授权的用户查看或修改,开发者有时...

    asp.net 加密解密工具!

    在web.config文件中,有时需要加密敏感信息,如连接字符串或API密钥。ASP.NET提供了一个名为aspnet_regiis.exe的工具,用于加密和解密web.config部分。例如,加密连接字符串: ```bash aspnet_regiis.exe -pef ...

Global site tag (gtag.js) - Google Analytics