在剛剛完成的一個ASP.NET項目中,遇到了這麼一個問題,項目部署到生產環境中時,領導要求項目中的配置文件(如web.config,app.config)中不能出現敏感字元,如:資料庫連接,等等。 第一個想到的方法是,寫一個加密解密演算法,將這些配置文件中的值以密文的方式存到config文件中,代碼中 ...
在剛剛完成的一個ASP.NET項目中,遇到了這麼一個問題,項目部署到生產環境中時,領導要求項目中的配置文件(如web.config,app.config)中不能出現敏感字元,如:資料庫連接,等等。
第一個想到的方法是,寫一個加密解密演算法,將這些配置文件中的值以密文的方式存到config文件中,代碼中config文件的值的時候,再進行解密。這個方法直接被否定了,因為代碼中,獲取config值的地方很分散,很難一一修改。
找了一下資料,發現有一個完美的解決方案,簡單,快速,又不會修改任何的代碼。下麵我們來看看是什麼解決方案:
ASP. NET 2.0提供了一個保護配置模型來加密和解密web.config中sections信息。RSAProtectedConfigurationProvider:預設通過RSA公鑰來加密和解密。
首先,我們通過在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 "appSettings" "C:\VisualStudio2008\Authorization"
–pef表明程式是以文件系統的形式建立的。第二個“appSettings”是你要加密的configuration 節點名字。第三個參數指名 web.config的物理路徑。
3. 成功執行命令後會顯示:加密成功。
現在,再打開程式中的 web.config,會變成像下麵這樣子了。
我們在程式中並不要寫任何代碼來解密連接字元串,因為.NET會自動的為我們解密。如果我們要用連接字元串,可以像平常那樣調用.
string strconnection = ConfigurationManager.AppSettings["dbconnection"].ToString();
如果我們想解密,只需要在VS的命令視窗中,輸入aspnet_regiis.exe -pdf "appSettings" "C:\VisualStudio2008\Authorization"
成功執行後,會顯示解密成功。
再打開web.config,我們可以看到解密後的字元串。
小伙伴們,是不是很方便啊。