溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-03-24 12:53:35 來源:網(wǎng)絡(luò) 閱讀:645 作者:gutaotao1989 欄目:編程語言

介紹

這篇文章我將介紹如何利用ASP.NET來加密和解密Web.config中連接字符串

背景描述

在以前的博客中,我寫了許多關(guān)于介紹 Asp.net, Gridview, SQL Server, Ajax, JavaScript等的文章。大多數(shù)情況下,我都把數(shù)據(jù)庫的連接字符串放在了web.config中。其中包含許多敏感信息,包括連接數(shù)據(jù)庫的用戶名密碼等。然而我們在web.config和machine.config中以純文本的方式保存密碼安全嗎?

如果我們的程序只是部署在內(nèi)部服務(wù)器中,這應(yīng)該沒什么問題。但如果我們的程序是運(yùn)行在共享主機(jī)上面,那我們應(yīng)該提高安全等級了。ASP. NET 2.0提供了一個(gè)保護(hù)配置模型來加密和解密web.config中sections信息。RSAProtectedConfigurationProvider:默認(rèn)通過RSA公鑰來加密和解密。

通過在命令行中工具運(yùn)行aspnet_regiis.exe命令,可以對web.config中的連接串進(jìn)行加密和解密。

第一種方式

首先,我們通過在windows命令行中執(zhí)行aspnet_regiis.exe來加密與解密。

在VS中創(chuàng)建一個(gè)新的websit項(xiàng)目,打開web.config,加入數(shù)據(jù)庫連接串,如:

然后我們按下面的步驟來加密和解密數(shù)據(jù)連接串

 <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 開發(fā)人員命令提示(如果是windows7,點(diǎn)右鍵與管理員身份運(yùn)行)

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

 –pef表明程序是以文件系統(tǒng)的形式建立的。第二個(gè)“connectionStrings”是你要加密的configuration 節(jié)點(diǎn)名字。第三個(gè)參數(shù)指名 web.config的物理路徑。

3. 成功執(zhí)行命令后會(huì)顯示:加密成功。

現(xiàn)在,再打開程序中的 web.config,會(huì)變成像下面這樣子了。

<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/5tUxcjmhHcy9a0oPunV5osNrMQRztgi2h6V6sxJOEh+NC+G9gQNkv1huXf1s7eoZRRLy5/LDtLXzzqMUOqLSlJUs9igChvi33c9XG4rwGF15Tpn4N34bpQBt94n0rpSkQ18V9HCPzii+UO64PlA+ykDeQhc9aQr4gO3mCfUzmY2S9gsXzRbzdq0oCWBDvx8UkX2uDxaysVHC9Fo7u6IrlpU0+hOdK95Y3/A==</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

我們在程序中并不要寫任何代碼來解密連接字符串,因?yàn)?NET會(huì)自動(dòng)的為我們解密。如果我們要用連接字符串,可以像平常那樣調(diào)用.

string strconnection = ConfigurationManager.AppSettings["dbconnection"].ToString();

如果我們想解密,只需要在VS的命令窗口中,輸入aspnet_regiis.exe -pdf "connectionStrings" "C:\VisualStudio2008\Authorization"
成功執(zhí)行后,會(huì)顯示解密成功。
再打開web.config,我們可以看到解密后的字符串。

現(xiàn)在,我們知道了如何在文件系統(tǒng)中加密和解密連接字符串。如果我們想加密運(yùn)行在IIS上的默認(rèn)網(wǎng)站,就像IE上展示的那樣,可以用下面的命令。

加密IIS默認(rèn)網(wǎng)站的web.config

aspnet_regiis.exe -pe "connectionStrings" -app "/SampleWebSite"

-pe說明程序是運(yùn)行在IIS上的。第二個(gè)參數(shù)指名要加密的configuration節(jié)點(diǎn)。-app用來指定虛擬目錄,最后一個(gè)參數(shù)就是程序部署的虛擬目錄名。

 Decrypt connectionStrings in web.config of IIS based site

解密IIS默認(rèn)網(wǎng)站上的web.config

aspnet_regiis.exe -pd "connectionStrings" -app "/SampleWebSite"

到這里我們知道如何用命令行工具執(zhí)行aspnet_regiis.exe命令來加密和解密web.config了。下面我將介紹如何在后臺(tái)代碼中來加密解密web.config。

備注:如果是vs2005 會(huì)提示aspnet_regiis 無效 解決辦法 開始-》運(yùn)行-》cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 -》然后接著運(yùn)行后面的代碼即可

第二種方式

在第二種方法中我會(huì)用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>

打開后臺(tái)代碼,添加下列命名空間:

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,添加數(shù)據(jù)庫連接字符串

 <connectionStrings>
    <add name="dbconnection" connectionString="Data Source=RahulMittal;Integrated Security=true;Initial Catalog=MySampleDB"/>
  </connectionStrings >

現(xiàn)在運(yùn)行程序并點(diǎn)擊加密按鈕之后,再打開web.config,會(huì)變成下面那樣:

<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來實(shí)現(xiàn)加密與解密,只需在代碼中將RSAProtectedConfigurationProvider替換成DataProtectionConfigurationProvider即可。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI