C#為配置文件加密的實現方法


用aspnet_regiis 工具修改配置文件

一、加密文件可以使用的Provider

.NET為我們提供了一個工具aspnet_regiis.exe來對web.config文件中的敏感信息進行加密(app.config文件可以先改名為web.config,加密后再改回app.config)。你可以使用兩個provider中的一個來進行加密:

System.Configuration.DPAPIProtectedConfigurationProvider:在System.Configuration.dll中,使用Windows DPAPI(Data Protection API)來進行加密,密鑰存在Windows Local Security Authority(LSA)中。

注意:當使用DPAPIProtectedConfigurationProvider時,加密文件所使用的帳號需要與運行web application的帳號相同,否則web application無法解密加密的內容。
System.Configuration.RSAProtectedConfigurationProvider:在System.Configuration.dll中,使用RSA算法來進行加密(RSA算法是非對稱加密,具體可參見前面一篇文章C#對稱加密與非對稱加密),公鑰存放在config文件當中,只有加密的計算機有密鑰。RSAProtectedConfigurationProvider通常是默認的缺省provider。

二、加密文件的命令

加密web.config文件可以使用:

aspnet_regiis -pef section web-app-physical-dir
Encrypt the configuration section. Optional arguments:
[-prov provider] Use this provider to encrypt.

比如運行下面的命令就會分別對connectionStrings和appSettings中的信息進行加密:

aspnet_regiis.exe -pef "connectionStrings" "C:\myweb\HelloService"
aspnet_regiis.exe -pef "appSettings" "C:\myweb\HelloService"

  

 

其中RSAProtectedConfigurationProvider是默認的缺省provider,如果想使用DPAPIProtectedConfigurationProvider,可以用-prov參數指明:

aspnet_regiis.exe -pef "connectionStrings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"

aspnet_regiis.exe -pef "appSettings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"

加密配置文件后,源程序不需要做任何改動。如果要修改或添加新的配置信息,需要先解密配置文件。不論使用哪種Provider,都只能在進行加密的計算機上對配置文件進行解密。

三、解密文件的命令

解密的命令如下(解密命令不需要-prov參數):

-pdf section web-app-physical-dir
Decrypt the configuration section.
aspnet_regiis.exe -pdf "connectionStrings" "C:\myweb\HelloService"
aspnet_regiis.exe -pdf "appSettings" "C:\myweb\HelloService"

  

四、總結

配置文件中經常會有用戶名密碼的敏感信息,為了防止該信息泄露,需要對配置文件進行加密。加密與解密可以使用.NET提供的工具aspnet_regiis.exe,可以在Windows .NET的文件夾中找到它。

該工具只對web.config文件進行修改,如果要加密或解密app.config,可以先將app.config文件改名為web.config,加密或解密后再改回來。

希望本文所述對大家的C#程序設計有所幫助。

 


加密命令:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pef "appSetting
s" "F:\aaa"
正在加密配置節...
成功!

解密命令:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -pdf "appSetting
s" "F:\aaa"
正在解密配置節...
成功!

說明:
-pef或-pdf后跟的是需要配置的節點的名字,后邊的F:\aaa是放web.config配置文件的絕對路徑

-pef 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行加密。
對應的這個解密則是
-pdf 參數 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行解密。

可以使用
aspnet_regiis -pc "myKey" -pku 創建密鑰;
aspnet_regiis -px "myKey" -pku 導出密鑰;
aspnet_regiis -pi "myKey" -pku 導入密鑰;

創建密鑰必須使用aspnet_regiis -pc "myKey" -exp 這樣才能被 -px參數導出。

-pri 選項,用於確保已導出私鑰信息。否則,導出的密鑰信息只能對信息進行加密,而不能進行解密。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -px "myKey" "c:\\keys.xml" -pri
正在將 RSA 密鑰導出到文件...
成功!

為了確保沒有人可以對已經用 RSA 密鑰容器加密的 Web.config 文件進行解密,將 RSA 密鑰容器導出到 .xml 文件后,請將 .xml 文件復制到 Web 服務器的外部位置,然后從 Web 服務器上刪除該文件。

若要刪除 RSA 密鑰容器,請在命令提示處運行帶有 -pz 開關的 aspnet_regiis.exe,后跟 "myKey"。

例如,下面的命令將刪除 "myKey":
aspnet_regiis -pz "myKey"

-pi 選項,后跟已導出的密鑰容器的名稱 "myKey",用於導入 RSA 密鑰容器。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pi "myKey" "f:\aaa\keys.xml"
正在從文件導入 RSA 密鑰...
成功!

 實測:

aspnet_regiis -pc "MyKey" -exp 創建密鑰;
aspnet_regiis -px "MyKey" "D:\\keys.xml" -pri 導出密鑰;
aspnet_regiis -pz "MyKey" 刪除密鑰;
aspnet_regiis -pi "MyKey" "D:\\keys.xml"導入密鑰;
加密"connectionStrings" "appSettings" :
aspnet_regiis.exe -pef "appSettings" "c:\release" -prov "DataProtectionConfigurationProvider"
解密:
aspnet_regiis.exe -pdf "appSettings" "c:\release"

 

https://www.cnblogs.com/wayshan/archive/2012/04/09/web_config.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM