在剛剛完成的一個ASP.NET項目中,遇到了這麼一個問題,項目部署到生產環境中時,領導要求項目中的配置文件(如web.config,app.config)中不能出現敏感字符,如:數據庫鏈接,等等。web
第一個想到的方法是,寫一個加密解密算法,將這些配置文件中的值以密文的方式存到config文件中,代碼中config文件的值的時候,再進行解密。這個方法直接被否認了,由於代碼中,獲取config值的地方很分散,很難一一修改。算法
找了一下資料,發現有一個完美的解決方案,簡單,快速,又不會修改任何的代碼。下面咱們來看看是什麼解決方案:數據庫
ASP. NET 2.0提供了一個保護配置模型來加密和解密web.config中sections信息。RSAProtectedConfigurationProvider:默認經過RSA公鑰來加密和解密。windows
首先,咱們經過在windows命令行中執行aspnet_regiis.exe來加密與解密。app
在VS中建立一個新的websit項目,打開web.config,加入數據庫鏈接串,如:ide
而後咱們按下面的步驟來加密和解密數據鏈接串加密
1. 開始菜單>>全部程序>>Microsoft visual studio 2008 >> Visual Studio Tools >> Visual Studio 2008 開發人員命令提示(若是是windows7,點右鍵與管理員身份運行)spa
2. 在命令窗口中,輸入命令 aspnet_regiis.exe -pef "appSettings" "C:\VisualStudio2008\Authorization"命令行
–pef代表程序是以文件系統的形式創建的。第二個「appSettings」是你要加密的configuration 節點名字。第三個參數指名 web.config的物理路徑。code
3. 成功執行命令後會顯示:加密成功。
如今,再打開程序中的 web.config,會變成像下面這樣子了。
咱們在程序中並不要寫任何代碼來解密鏈接字符串,由於.NET會自動的爲咱們解密。若是咱們要用鏈接字符串,能夠像日常那樣調用.
string strconnection = ConfigurationManager.AppSettings["dbconnection"].ToString();
若是咱們想解密,只須要在VS的命令窗口中,輸入aspnet_regiis.exe -pdf "appSettings" "C:\VisualStudio2008\Authorization"
成功執行後,會顯示解密成功。
再打開web.config,咱們能夠看到解密後的字符串。
小夥伴們,是否是很方便啊。