博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何为配置文件加密
阅读量:5069 次
发布时间:2019-06-12

本文共 4444 字,大约阅读时间需要 14 分钟。

原创地址:

转载请注明出处

 

在web.config或app.config文件里我们经常会存储一些敏感信息,比如connectionStrings或者appSettings,比如像下面的文件。

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算法是非对称加密,参见),公钥存放在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文件变成:

 

Rsa Key
E2fO9C0TJVxImLYQZza+fCQdDbTpNh/kOKLRsK6zcFjkgtUCl6SnMViuu/2G1NVTxqXyEWYwyK6AiCZA+feeG/AvYvmEEVopVDb0YyGeuJgEI1r8HxTl8Cv+f2EIimP7LJI+JRZVerI4MU6Ke3wxm2S/ATc73/W6eg9808f4/D6J0pp3wND4E79gBiAnBHFYQIefdJYUsmHR9z9LiIqjCllkkj/JB0kso0kGJ9i+iew1Jae5jugIN8gPxsXbCfmw6ru3I3Kbpa8Z5AllfkFA2YKrsuV3c7eLLJ0kB4lsIJIUTy3kRyA4GjdChOmlNwwffIbhwUPPxa25CiF0VAq27Q==
I1DWG11Iz/rq+NC9C/21B3Q22J9+IexHPH6kkWvQPeHUO6OvOWeQbk3wHALR2ql8pz0gQJFyfTypMk/xSSikFI2Dcy5mgYY3kP73bQQ83ho3O1HPw9TsRtK1G8gmVNGyQLj7iTRcoGfiYYmSibPynv1MzSV1qDXlnVfKiMqKRZ5ZPiMSMc5u3dDEL/JW1oCvAGs5tHrZU5+vgvm0yCmSuCWZbXva+iv9J35EQqs58pq+hwVo1hg1dffdupGCBykaXGl5VX3TIGc=
Rsa Key
WVoFIs8rSEgqKw1C0QCmePs7WK6EIoGCfdx9CTJNmABoVvoEWPnOEQwz/6Ruu0rGwa7q91KuhGILmy4NEN0padnX6FScCdEzP6CS59U3IFumYmTrD7D9ihqFO2aIL/SuBvV3D2kxhHaYGFaPuvYgsyOLf3+aYR3O/uh/k5wZxLoIeKUUrT762J3bdaK6cJWQeuOu4j2vDXEdawdwhlnK12UV8+/AXZNlFW1N3Z0RUVFX1nMSwTaIu8F3tZ9hCFbGwbTm2T0XnfDOcB6dCxCutqC8pXD36laAfiSANzAWoC+Yhf5eFSj24fX0NU6UTQB8fqLyOgWsIMLxZLKVrwnlmg==
5W2KhG/oETLUDptobcOM52x1qD/g9A0By/wcGXI+fm7EdcD8mT3TxsLVBVcHRBCyUO7OIHl8NyCrduRSYwyd8ggBCriQ5KrbAmW4LXrNnw/JjjCEJWPuRcRucVRfpgap2nHh6BXRXC/AU6v0GcRqy7LV8179PgGtyAa8IE1mV/w=

 

 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/jfzhu/p/4039216.html

你可能感兴趣的文章
Java中的String,StringBuilder,StringBuffer三者的区别
查看>>
Python爬虫
查看>>
LDA
查看>>
轻量级Mysql Sharding中间件——Shark
查看>>
python的列表与shell的数组
查看>>
移动国家号(MCC)
查看>>
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
python标准库——queue模块 的queue类(单向队列)
查看>>
display的值有哪些?
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
基于Lucene3.5.0怎样从TokenStream获得Token
查看>>
一网打尽各类Java基本数据类型转换
查看>>
FlowLayout布局
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>