当前位置: 首页 > 编程笔记 >

C#为配置文件加密的实现方法

左丘弘致
2023-03-14
本文向大家介绍C#为配置文件加密的实现方法,包括了C#为配置文件加密的实现方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C#为配置文件加密的实现方法,分享给大家供大家参考。具体实现方法如下:

一般来说,在web.config或app.config文件里我们经常会存储一些敏感信息,比如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为我们提供了一个工具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"

加密后的web.config文件变成:

<?xml version="1.0"?>

<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是默认的缺省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#实现对文件进行加密解密的方法,包括了C#实现对文件进行加密解密的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现对文件进行加密解密的方法。分享给大家供大家参考。具体如下: 解密代码如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍RC4文件加密的python实现方法,包括了RC4文件加密的python实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了RC4文件加密的python实现方法。分享给大家供大家参考。具体分析如下: 基于RC4流加密算法,使用扩展的16*16的S盒,32字节密钥。 目前应该是比较安全的。   刚学习python,好不容易调通了。 而且在VC和python下各实现了一遍,两

  • 本文向大家介绍spring配置文件加密方法示例,包括了spring配置文件加密方法示例的使用技巧和注意事项,需要的朋友参考一下 Spring的配置文件是用于指导Spring工厂进行Bean生成、依赖关系注入及Bean示例分发的”图纸”,他是一个或多个标砖的XML文档,J2EE程序员必须学会灵活应用这份”图纸”,准确的表达自己的”生成意图”。Spring配置文件是一个或多个标准的XML文档,appl

  • 本文向大家介绍C#实现最简单的文本加密方法,包括了C#实现最简单的文本加密方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现最简单的文本加密方法。分享给大家供大家参考。具体实现方法如下: 上面是最简单的加密和解密文本的函数,不需要任何库文件支持,只是把原文和密钥进行字节的异或,想要把密文翻译回来,很简单,拿着密文和密钥重新异或一次就可以。 如果密钥正确的话,就会回来正确的原始文本

  • 本文向大家介绍Spring cloud config 配置文件加密方式,包括了Spring cloud config 配置文件加密方式的使用技巧和注意事项,需要的朋友参考一下 前言 我们会使用git来保存我们项目的配置文件,但是文件中总有一些敏感数据,对于这些敏感数据我们通常需要给它加密,加密通常有两种加密方式,一种是对称加密,一种是非对称加密,对称加密简单方便,但是安全性没有非对称加密高,非对称

  • 本文向大家介绍C#文件加密方法汇总,包括了C#文件加密方法汇总的使用技巧和注意事项,需要的朋友参考一下 本文实例汇总了C#文件加密方法。分享给大家供大家参考。具体实现方法如下: 1、AES加密类 2、文件加密类 3、文件夹加密类 4、跨线程访问控制委托 5、Form1.cs文件