C#為配置文件加密的實(shí)現(xiàn)方法
本文實(shí)例講述了C#為配置文件加密的實(shí)現(xiàn)方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
一般來(lái)說(shuō),在web.config或app.config文件里我們經(jīng)常會(huì)存儲(chǔ)一些敏感信息,比如connectionStrings或者appSettings,比如像下面的文件。
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<connectionStrings>
<add name="MyNwConnectionString" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword;"/>
</connectionStrings>
<appSettings>
<add key="User" value="myUsername"/>
<add key="Password" value="myPassword"/>
</appSettings>
</configuration>
using System.Configuration;
namespace WebConfigEncryptTest
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string user = ConfigurationManager.AppSettings.Get("User");
string password = ConfigurationManager.AppSettings.Get("Password");
string connectionString = ConfigurationManager.ConnectionStrings["MyNwConnectionString"].ConnectionString;
}
}
}
一、加密文件可以使用的Provider
.NET為我們提供了一個(gè)工具aspnet_regiis.exe來(lái)對(duì)web.config文件中的敏感信息進(jìn)行加密(app.config文件可以先改名為web.config,加密后再改回app.config)。你可以使用兩個(gè)provider中的一個(gè)來(lái)進(jìn)行加密:
System.Configuration.DPAPIProtectedConfigurationProvider:在System.Configuration.dll中,使用Windows DPAPI(Data Protection API)來(lái)進(jìn)行加密,密鑰存在Windows Local Security Authority(LSA)中。
注意:當(dāng)使用DPAPIProtectedConfigurationProvider時(shí),加密文件所使用的帳號(hào)需要與運(yùn)行web application的帳號(hào)相同,否則web application無(wú)法解密加密的內(nèi)容。
System.Configuration.RSAProtectedConfigurationProvider:在System.Configuration.dll中,使用RSA算法來(lái)進(jìn)行加密(RSA算法是非對(duì)稱加密,具體可參見(jiàn)前面一篇文章C#對(duì)稱加密與非對(duì)稱加密),公鑰存放在config文件當(dāng)中,只有加密的計(jì)算機(jī)有密鑰。RSAProtectedConfigurationProvider通常是默認(rèn)的缺省provider。
二、加密文件的命令
加密web.config文件可以使用:
Encrypt the configuration section. Optional arguments:
[-prov provider] Use this provider to encrypt.
比如運(yùn)行下面的命令就會(huì)分別對(duì)connectionStrings和appSettings中的信息進(jìn)行加密:
aspnet_regiis.exe -pef "appSettings" "C:\myweb\HelloService"
加密后的web.config文件變成:
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<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>E2fO9C0TJVxImLYQZza+fCQdDbTpNh/kOKLRsK6zcFjkgtUCl6SnMViuu/2G1NVTxqXyEWYwyK6AiCZA+feeG/AvYvmEEVopVDb0YyGeuJgEI1r8HxTl8Cv+f2EIimP7LJI+JRZVerI4MU6Ke3wxm2S/ATc73/W6eg9808f4/D6J0pp3wND4E79gBiAnBHFYQIefdJYUsmHR9z9LiIqjCllkkj/JB0kso0kGJ9i+iew1Jae5jugIN8gPxsXbCfmw6ru3I3Kbpa8Z5AllfkFA2YKrsuV3c7eLLJ0kB4lsIJIUTy3kRyA4GjdChOmlNwwffIbhwUPPxa25CiF0VAq27Q==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>I1DWG11Iz/rq+NC9C/21B3Q22J9+IexHPH6kkWvQPeHUO6OvOWeQbk3wHALR2ql8pz0gQJFyfTypMk/xSSikFI2Dcy5mgYY3kP73bQQ83ho3O1HPw9TsRtK1G8gmVNGyQLj7iTRcoGfiYYmSibPynv1MzSV1qDXlnVfKiMqKRZ5ZPiMSMc5u3dDEL/JW1oCvAGs5tHrZU5+vgvm0yCmSuCWZbXva+iv9J35EQqs58pq+hwVo1hg1dffdupGCBykaXGl5VX3TIGc=</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
<appSettings 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>WVoFIs8rSEgqKw1C0QCmePs7WK6EIoGCfdx9CTJNmABoVvoEWPnOEQwz/6Ruu0rGwa7q91KuhGILmy4NEN0padnX6FScCdEzP6CS59U3IFumYmTrD7D9ihqFO2aIL/SuBvV3D2kxhHaYGFaPuvYgsyOLf3+aYR3O/uh/k5wZxLoIeKUUrT762J3bdaK6cJWQeuOu4j2vDXEdawdwhlnK12UV8+/AXZNlFW1N3Z0RUVFX1nMSwTaIu8F3tZ9hCFbGwbTm2T0XnfDOcB6dCxCutqC8pXD36laAfiSANzAWoC+Yhf5eFSj24fX0NU6UTQB8fqLyOgWsIMLxZLKVrwnlmg==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>5W2KhG/oETLUDptobcOM52x1qD/g9A0By/wcGXI+fm7EdcD8mT3TxsLVBVcHRBCyUO7OIHl8NyCrduRSYwyd8ggBCriQ5KrbAmW4LXrNnw/JjjCEJWPuRcRucVRfpgap2nHh6BXRXC/AU6v0GcRqy7LV8179PgGtyAa8IE1mV/w=</CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
</configuration>
其中RSAProtectedConfigurationProvider是默認(rèn)的缺省provider,如果想使用DPAPIProtectedConfigurationProvider,可以用-prov參數(shù)指明:
aspnet_regiis.exe -pef "connectionStrings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"
aspnet_regiis.exe -pef "appSettings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"
加密配置文件后,源程序不需要做任何改動(dòng)。如果要修改或添加新的配置信息,需要先解密配置文件。不論使用哪種Provider,都只能在進(jìn)行加密的計(jì)算機(jī)上對(duì)配置文件進(jìn)行解密。
三、解密文件的命令
解密的命令如下(解密命令不需要-prov參數(shù)):
Decrypt the configuration section.
aspnet_regiis.exe -pdf "connectionStrings" "C:\myweb\HelloService"
aspnet_regiis.exe -pdf "appSettings" "C:\myweb\HelloService"
四、總結(jié)
配置文件中經(jīng)常會(huì)有用戶名密碼的敏感信息,為了防止該信息泄露,需要對(duì)配置文件進(jìn)行加密。加密與解密可以使用.NET提供的工具aspnet_regiis.exe,可以在Windows .NET的文件夾中找到它。
該工具只對(duì)web.config文件進(jìn)行修改,如果要加密或解密app.config,可以先將app.config文件改名為web.config,加密或解密后再改回來(lái)。
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C#中讀取App.config配置文件代碼實(shí)例
- C# WinForm開(kāi)發(fā)中使用XML配置文件實(shí)例
- asp.net(c#)動(dòng)態(tài)修改webservice的地址和端口(動(dòng)態(tài)修改配置文件)
- C# 讀取指定路徑配置文件的方法
- ASP.NET(C#)應(yīng)用程序配置文件app.config/web.config的增、刪、改操作
- c#讀寫ini配置文件示例
- C#針對(duì)xml基本操作及保存配置文件應(yīng)用實(shí)例
- C#配置文件Section節(jié)點(diǎn)處理總結(jié)
- C#訪問(wèn)應(yīng)用程序配置文件的方法
- C#配置文件操作類分享
相關(guān)文章
c#代碼自動(dòng)修改解決方案下任意文件實(shí)例
這篇文章主要介紹了c#代碼自動(dòng)修改解決方案下任意文件實(shí)例,有需要的朋友可以參考一下2013-11-11新手小白用C# winform 讀取Excel表的實(shí)現(xiàn)
這篇文章主要介紹了新手小白用C# winform 讀取Excel表的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01詳解如何選擇使用ArrayList、HashTable、List、Dictionary數(shù)組
本文詳細(xì)介紹了ArrayList、HashTable、List、Dictionary的用法,以及什么情況選用該數(shù)組,以便提高開(kāi)發(fā)效率。希望對(duì)大家有所幫助2016-11-11C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程
這篇文章主要介紹了C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程的相關(guān)資料,需要的朋友可以參考下2016-07-07C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題
這篇文章主要介紹了C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04winform天氣預(yù)報(bào)小工具(附源碼下載)
主要原理就是利用網(wǎng)上免費(fèi)的webservice獲取天氣數(shù)據(jù),需要的朋友可以參考下2012-03-03