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

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

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

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

输入“cd \”退回根目录,输入“cd WINDOWS\Microsoft.NET\Framework\v2.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:\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,加密或解密后再改回来。

原文地址:https://www.cnblogs.com/ZGQ-VIP/p/12089565.html

时间: 2024-10-08 09:11:18

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

PHP 加密 和 解密 方法

关于Discuz的加密解密函数,相信大家都有所了解,该authcode函数可以说是对PHP界作出了重大的贡献,真的发觉discuz这个函数写的太精彩啦. 研究了一下这个算法,总的来说可以归纳为以下三点: 1,动态性,同一字符串使用相同的key,每次加密的密文都不一样,而解密方法只有一个,其实就是把解密的信息放到了密文上面. 2,时效性,可以自己加一个限期参数,以秒为单位,这个其实就是在密文里加入了有效时间. 3,统一性,加密和解密都用同一个函数,而且用了比较简单的异或算法. 由于该函数具有以上功

.net C# 给配置文件加密--不同服务器共用同一个加密配置

.net C#  给配置文件加密--不同服务器共用同一个加密配置 保护配置提供程序 cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319     or  C:\Windows\Microsoft.NET\Framework\v4.0.30319 1创建一个可导出的rsa密钥容器,命名为Key aspnet_regiis -pc "EsdConnectionStringsKey" -exp 2在要加密的信息前面指定密钥容器,如: <c

读取配置文件的几种方法

java读取配置文件的几种方法 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法. 一.读取xml配置文件 (一)新建一个java bean(HelloBean.java) java 代码 package chb.demo.vo; public class HelloBean { private String helloWorld; public String get

U盘加密软件使用方法

U盘加密软件使用方法 U盘加密是指对U盘内容有加解密保护功能的U盘.因为随着U盘使用的越来越普遍,在U盘安全保护不到位而导致的各种信息泄漏事件不断频发,但是不少的人对U盘的安全还是显得漠不关心,而另一部分人的情况则是这样,尽管自己已经意识到了U盘安全的重要性,但是因为不知道如何给U盘加密而不能保障U盘的安全,现在有了护密文件加密软件,这一切就变得非常的简单的了,因为它能够对U盘进行深层次的加密. 护密文件夹加密软件使用最先进最成熟的AES.DES .3DES和Blowfish等加密算法,使破解成

说一说ASP.NET web.config 加密及解密方法 (代码)

/// <summary> /// 保护web.config的加密和解密 /// </summary> public class ProtectHelper { /// <summary> /// 解密 /// </summary> /// <param name="pToDecrypt">加密连接字符串</param> /// <param name="sKey">自定义密钥<

mysql 查看当前使用的配置文件my.cnf的方法(推荐)

my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载. 安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的. 使用locate my.cnf命令可以列出所有的my.cnf文件 命令 locate my.cnf 输出 ? 1 2 3 4 5 6 7 8 9 10 11 /usr/local/Cellar/mysql/5.6.24/my.cnf /usr/local/Cellar/mysql/5.6.24/mysql-test/i

神级程序员带来:用python有证书的加密解密实现方法!

本文实例讲述了python有证书的加密解密实现方法.分享给大家供大家参考.具体实现方法如下: 最近在做python的加解密工作,同时加完密的串能在php上能解出来,网上也找了一些靠谱的资料,刚好也有时间我就总结了一下python在加密与解密这块的代码,今后可能还能用的上.相对于php而言python这块加解密组件较多的,分别是: 一. RSA标准方式生成的证书 1.加密解密.加密签名.验证加密签名 代码如下: #encoding: utf8 import os import M2Crypto #

使用Jasypt对SpringBoot配置文件加密

# **前言** 在日前安全形势越来越严重的情况下,让我意识到在项目中存在一个我们经常忽略的漏洞,那就是我们的项目的配置文件中配置信息的安全,尤其是数据库连接的用户名和密码的安全.所以这里我们就需要对数据库的用户名和密码进行加密,这也是本文的由来.本文采用Jasypt对Spring Boot配置文件加密的相关方法,其实呢,也还有其他方案,具体的会在后面的相关文章中说明. # **引入jasypt** ```xml com.github.ulisesbocchio jasypt-spring-bo

.Net配置文件读取及修改方法封装(未加密)

.Net平台下开发时,需要将有些数据存储在XML文档中,而我们的首选即是默认新建的app.Config了.新建流程如下: 第一步:在启动工程上右键->添加->新建项.如下图: 第二步:新建配置文件,修改名称,切记要将默认的App1.config修改为App.config,因为默认寻找的配置文件名称是App.config.如果不改名称将找不到,如下图: 第三步:添加相应的connectionStrings和appSettings,如下图: 那么至此,我们的配置文件已经创建好了.那么创建好的配置文