C#为配置⽂件加密的实现⽅法
本⽂实例讲述了C#为配置⽂件加密的实现⽅法,分享给⼤家供⼤家参考。具体实现⽅法如下:
⼀般来说,在fig或fig⽂件⾥我们经常会存储⼀些敏感信息,⽐如connectionStrings或者appSettings,⽐如像下⾯的⽂件。
复制代码代码如下:
<?xml version="1.0"?>
<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;
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为我们提供了⼀个⼯具来对fig⽂件中的敏感信息进⾏加密(fig⽂件可以先改名为fig,加密后再改回fig)。你可以使⽤两个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算法是⾮对称加密,具体可参见前⾯⼀篇⽂章),公钥存放在config⽂件当
中,只有加密的计算机有密钥。RSAProtectedConfigurationProvider通常是默认的缺省provider。
⼆、加密⽂件的命令
加密fig⽂件可以使⽤:
复制代码代码如下:
aspnet_regiis -pef section web-app-physical-dir
Encrypt the configuration section. Optional arguments:
[-prov provider] Use this provider to encrypt.
⽐如运⾏下⾯的命令就会分别对connectionStrings和appSettings中的信息进⾏加密:
复制代码代码如下:
-pef "connectionStrings" "C:\myweb\HelloService"
-pef "appSettings" "C:\myweb\HelloService"
加密后的fig⽂件变成:
复制代码代码如下:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="/2001/04/xmlenc#Element"
xmlns="/2001/04/xmlenc#">
<EncryptionMethod Algorithm="/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="/2000/09/xmldsig#">
<EncryptedKey xmlns="/2001/04/xmlenc#">
<EncryptionMethod Algorithm="/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>E2fO9C0TJVxImLYQZza+fCQdDbTpNh/kOKLRsK6zcFjkgtUCl6SnMViuu/2G1NVTxqXyEWYwyK6AiCZA+feeG/AvYvmEEVopVDb0YyGeuJgEI1r8HxTl8Cv+f2EIimP7LJI+JRZVerI4MU6Ke3wxm2S </CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>I1DWG11Iz/rq+NC9C/21B3Q22J9+IexHPH6kkWvQPeHUO6OvOWeQbk3wHALR2ql8pz0gQJFyfTypMk/xSSikFI2Dcy5mgYY3kP73bQQ83ho3O1HPw9TsRtK1G8gmVNGyQLj7iTRcoGfiYYmSibPyn </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
<appSettings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="/2001/04/xmlenc#Element"
xmlns="/2001/04/xmlenc#">
<EncryptionMethod Algorithm="/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="/2000/09/xmldsig#">
<EncryptedKey xmlns="/2001/04/xmlenc#">
<EncryptionMethod Algorithm="/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>WVoFIs8rSEgqKw1C0QCmePs7WK6EIoGCfdx9CTJNmABoVvoEWPnOEQwz/6Ruu0rGwa7q91KuhGILmy4NEN0padnX6FScCdEzP6CS59U3IFumYmTrD7D9ihqFO2aIL/SuBvV3D2kxhHaYGFaP </CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>5W2KhG/oETLUDptobcOM52x1qD/g9A0By/wcGXI+fm7EdcD8mT3TxsLVBVcHRBCyUO7OIHl8NyCrduRSYwyd8ggBCriQ5KrbAmW4LXrNnw/JjjCEJWPuRcRucVRfpgap2nHh6BXRXC/AU6v0GcR </CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
</configuration>
其中RSAProtectedConfigurationProvider是默认的缺省provider,如果想使⽤DPAPIProtectedConfigurationProvider,可以⽤-prov参数指明:
-pef "connectionStrings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"
-pef "appSettings" "C:\myweb\HelloService" -prov "DataProtectionConfigurationProvider"
加密配置⽂件后,源程序不需要做任何改动。如果要修改或添加新的配置信息,需要先解密配置⽂件。不论使⽤哪种Provider,都只能在进⾏加密的计算机上对配置⽂件进⾏解密。
三、解密⽂件的命令
解密的命令如下(解密命令不需要-prov参数):
复制代码代码如下:
-pdf section web-app-physical-dir
Decrypt the configuration section.
-pdf "connectionStrings" "C:\myweb\HelloService"
-pdf "appSettings" "C:\myweb\HelloService"
四、总结
配置⽂件中经常会有⽤户名密码的敏感信息,为了防⽌该信息泄露,需要对配置⽂件进⾏加密。加密与解密可以使⽤.NET提供的⼯具,可以在Windows .NET的⽂件夹中到它。
该⼯具只对fig⽂件进⾏修改,如果要加密或解密fig,可以先将fig⽂件改名为fig,加密或解密后再改回来。
希望本⽂所述对⼤家的C#程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论