這篇文章我将介紹如何利用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,加入資料庫連接配接串,如:
然後我們按下面的步驟來加密和解密資料連接配接串
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,會變成像下面這樣子了。
我們在程式中并不要寫任何代碼來解密連接配接字元串,因為.NET會自動的為我們解密。如果我們要用連接配接字元串,可以像平常那樣調用.
如果我們想解密,隻需要在VS的指令視窗中,輸入aspnet_regiis.exe -pdf "connectionStrings" "C:\VisualStudio2008\Authorization"
成功執行後,會顯示解密成功。
再打開web.config,我們可以看到解密後的字元串。
現在,我們知道了如何在檔案系統中加密和解密連接配接字元串。如果我們想加密運作在IIS上的預設網站,就像IE上展示的那樣,可以用下面的指令。
加密IIS預設網站的web.config
-pe說明程式是運作在IIS上的。第二個參數指名要加密的configuration節點。-app用來指定虛拟目錄,最後一個參數就是程式部署的虛拟目錄名。
Decrypt connectionStrings in web.config of IIS based site
解密IIS預設網站上的web.config
到這裡我們知道如何用指令行工具執行aspnet_regiis.exe指令來加密和解密web.config了。下面我将介紹如何在背景代碼中來加密解密web.config。
備注:如果是vs2005 會提示aspnet_regiis 無效 解決辦法 開始-》運作-》cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 -》然後接着運作後面的代碼即可
在第二種方法中我會用RSAProtectedConfigurationProvider和DataProtectionConfgurationProvider來加密解密web.config
首先,打開Default.aspx,添加如下代碼:
打開背景代碼,添加下列命名空間:
再添加如下代碼
完成之後,打開web.config,添加資料庫連接配接字元串
現在運作程式并點選加密按鈕之後,再打開web.config,會變成下面那樣:
如果我們想用DataProtectionConfigurationProvider來實作加密與解密,隻需在代碼中将RSAProtectedConfigurationProvider替換成DataProtectionConfigurationProvider即可。
本文轉自 gutaotao1989 51CTO部落格,原文連結:http://blog.51cto.com/taoyouth/1689581