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


    利用ASP.NET注册工具ASPnet_regiis.exe注册IIS,该工具的名称为aspnet_regiis.exe,在32位机上,该工具存在于C:WINDOWSMicrosoft.NETFrameworkv2.0.50727,在64位机中“Framework”的名字为“Framework64”,不同的IIS版本“v2.0.50727”也可能有所改变。

    当要用Web Service或Web项目调用一些外围设备时,使用该工具显得尤为重要,使用方法为:

    进入上述的aspnet_regiis.exe所在的目录下,注意,使用DOS进入,在运行中输入“cmd”,进入DOS,

    输入“cd ”退回根目录,输入“cd WINDOWSMicrosoft.NETFrameworkv2.0.50727”,进入目录,若不是这个路径可用“dir 文件夹名”查找可能的文件夹。

    进入后输入“aspnet_regiis -i”进行注册即可

    这篇文章主要介绍了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:mywebHelloService"

    aspnet_regiis.exe -pef "appSettings" "C:mywebHelloService"

    加密后的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:mywebHelloService" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis.exe -pef "appSettings" "C:mywebHelloService" -prov "DataProtectionConfigurationProvider"

    加密配置文件后,源程序不需要做任何改动。如果要修改或添加新的配置信息,需要先解密配置文件。不论使用哪种Provider,都只能在进行加密的计算机上对配置文件进行解密。

    三、解密文件的命令

    解密的命令如下(解密命令不需要-prov参数):

    复制代码代码如下:
    -pdf section web-app-physical-dir

    Decrypt the configuration section.

    aspnet_regiis.exe -pdf "connectionStrings" "C:mywebHelloService"

    aspnet_regiis.exe -pdf "appSettings" "C:mywebHelloService"

    四、总结

    配置文件中经常会有用户名密码的敏感信息,为了防止该信息泄露,需要对配置文件进行加密。加密与解密可以使用.NET提供的工具aspnet_regiis.exe,可以在Windows .NET的文件夹中找到它。

    该工具只对web.config文件进行修改,如果要加密或解密app.config,可以先将app.config文件改名为web.config,加密或解密后再改回来。

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Oracle数据库基础
    软件项目开发模式——三层模式
    JavaWeb——Ajax与MVC学习总结
    JavaWeb——EL及JSTL学习总结
    JavaWeb——过滤器及监听器
    JavaWeb——Servlet开发
  • 原文地址:https://www.cnblogs.com/ZGQ-VIP/p/12089565.html
Copyright © 2020-2023  润新知