05
2023
05
11:10:24

web.config加解密



推荐点击下面图片,通过本站淘宝优惠价购买:

image.png

开始--->运行,输入cmd,接着输入以下内容

加密:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "你的Web项目路径"

解密:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "你的Web项目路径"

.NET为版本的路径自行修改,其中connectionStrings连接字符串的名称。




【案例引用】

例如

XML/HTML code  
?
1
2
3
<        connectionStrings        >
               <        add          name        =        "EnterpriseWebConnectionString"          connectionString        =        "Data Source=. ; Initial Catalog=Enterprise;User ID=sa;Password=1391018"          providerName        =        "System.Data.SqlClient"        />
           </        connectionStrings        >

如何给Data Source=. ; Initial Catalog=Enterprise;User ID=sa;Password=1391018" providerName="System.Data.SqlClient 加密&#xff1f;
在程序中如何调用&#xff1f;能否给个例子&#xff1f;有没有方便加解密的小工具呢&#xff1f;


1. .NET本身已经提供有Encrypt命名空间的一些加密算法&#xff0c;有对称的&#xff0c;也有非对称的。当然&#xff0c;你也可以设计自己的一个加密算法。
2. 无论是Web应用&#xff0c;还是Winform应用&#xff0c;连接串都通常是保存在web.config或者app.config里的&#xff0c;并且提供了相应的一个Singleton模式的类来提供对连接串的访问。
3. 你需要做的&#xff0c;就是每次连接前&#xff0c;利用这个Singleton类把连接串密文取出&#xff0c;解密后再把明文作为参数传递给Connection对象的构造子进行连接。

1.先来看看如何在web.config中写入数据库连接字符串.打开web.config文件,一开始web.config文件里默认就有两个配置节,分别是"<connectionStrings/>","<appSettings/>",在这两个配置节下都可以写入连接字符串,一般来说是在<connectionStrings>中写,如:
<connectionStrings>
<add name = "connectionString" connectionString="server=localhost;database=hh_li;User ID=sa;password=”/>
</connectionStrings>
或者写在<appSettings>中:
<appStrings>
<add key=''connectionstring" value=”server=localhost;database=hh_li;User ID=sa;password=”/>  
</appStrings>
在以上两种方式中,name和key的值是连接字符串的"名字",就和一个变量的变量名一样,connectionString的值是具体的连接字符串内容.
2.asp.net2.0中读取web.config数据库连接字符串2种方法
方法一&#xff1a;
string myConn = System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString;
方法二&#xff1a;
string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["sqlConnectionString"].ToString();
3.web.config中连接字符串的加密解密
加密:
asp.net里面web.config文件中的连接字符串是以明码形式保存的,通常存储内容包括数据库服务器名称、数据库名称、账号、甚至包括密码。
为了解决这个问题&#xff0c;ASP.NET 2.0支持一种将连接字符串等敏感信息加密存储于是Web.config文件中的方法.进入.net 的SDK命令提示符,使用命令行工具aspnet_regiis.exe.该应用程序位于“%systemroot%\Micrsoft.NET\Framework\versionNumber”文件夹中。aspnet_regiis.exe是一种常见的命令行解释器&#xff0c;开发人员只需按照简单的语法要求输入命令&#xff0c;就可以完成连接字符串的加密或解密的任务。
  假设需要加密的Web.config文件位于“D:\website2”文件夹中&#xff0c;则使用的命令行如下。
  aspnet_regiis.exe -pef “connectionStrings” “D:\website2”
  参数"-pef"表示根据文件绝对路径执行加密配置节&#xff1b;“connectionStrins”表示所加密的配置节名称&#xff1b;“D:\website2”表示Web.config文件所在文件夹绝对路径。  加密结束后&#xff0c;aspnet_regiis.exe将提示开发人员加密成功
解密:连接字符串加密后&#xff0c;其它人很难在不经过解密的情况下&#xff0c;了解具体的连接字符串内容。
解密的命令如下: aspnet_regiis.exe -pdf “connectionStrings” “D:\website2”  需要注意的是&#xff0c;加密过程中使用了一个基于本机的密钥&#xff0c;这意味着解密过程必须在同一台计算机上完成。如果是将加密后的Web.config文件移动到其它计算机上&#xff0c;那么Web.config文件中的连接字符串将不能够正常解密。注意,加密是-pef,解密是-pdf,不要搞错了。

上述整理成BAT批处理脚本&#xff1a;

-----------------------------------------------

连接字符串加密

-----------------------------------------------
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "C:\Program Files\Microsoft\.NET Pet Shop 4.0\Web"
PAUSE


-----------------------------------------------
连接字符串解密

-----------------------------------------------
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "C:\Program Files\Microsoft\.NET Pet Shop 4.0\Web"
PAUSE

【详细介绍】

在WEB网站开发过程中&#xff0c;如果我们将数据库连接字符串封装到.DLL文件中&#xff0c;将会给数据库和程序的迁移带来麻烦&#xff0c;因为万一服务器地址或者数据库发生变更&#xff0c;那么我们就不得不修改源程序并重新将其编译。更好的解决方法是将数据库连接字符串写入到web.config配置文件中&#xff0c;可问题是将连接字符串写入到web.config文件中之后&#xff0c;任何人都能打开看到所连接的数据库名和密码&#xff0c;又会带来安全隐患&#xff0c;因此为了保证数据库的安全性&#xff0c;我们可以通过使用微软IDE自带的命令aspnet_regiis.exe将配置文件web.config中指定的标签进行加密&#xff0c;如果以后想查看加密后的连接字符串&#xff0c;我们还可以使用aspnet_regiis.exe将加密后的字符串进行解密。


1.    加密通用语法
  加密一个特定网站的web.config文件的通用形式
  aspnet_regiis.exe -pef secion physical_directory -prov provider
  或
  aspnet_regiis.exe -pe secion -app virtual_directory -prov provider
  其中&#xff0c;各个参数的含义如下&#xff1a;

  •     section表示要加密的配置节

  •     physical_directory用于指定站点的物理路径。

  •     virtual_directory用户指定虚拟路径。

  •     provider指定加密提供程序。

   加密一个特定站点的连接字符串就是&#xff1a;
    aspnet_regiis.exe -pef "connectionStrings" "你的web项目路径" -prov "DataProtectionConfigurationProvider"
    其中DataProctionConfiguartionProvider是Windows数据保护API&#xff08;DPAPI&#xff09;提供程序&#xff0c;它使用Windows内置的密码学技术来加解密配置节。默认情况下&#xff0c;这个提供程序使用本机的密钥。


2.    加密方法

 运行Visual Studio 2008命令提示


 

 加密后的结果

  1.  <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">  

  2. <EncryptedData>  

  3. <CipherData>    <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAy1WyvzomB0WAlqYo+ogiigQAAAACAAAAAAADZgAAqAAAABAAAADbDjp+bAce//lsg/so66+8AAAAAASAAACgAAAAEAAAANlF3b73Kdupv/cAf4a9nPUwAQAAoTvrHdAjNjaJFEfiG7pD6sG8GMNJKGpnd4JLchu7W9XhOuPgG4C/LD9H9WQ9uF3t/0MoMI9tbrWdFJ1Yu5/e3PAV4RCbCvDlPD0VC7hxtDMqfRjQ+1OhTdk2woiSNpx0TzXwZE25o4vlXq/aYri1Wmlo2zyRqSkg0hQFQbObCf7lrgWEUjsv+pEOS5OVXcgNhFipVMy5iQ8sH5fNHmGg8gu5JlZQaOqYFG8ci7MGOebcQzR67krJXRBrs26lZtAj8lzf2bK+QcSqtU7Rt4C33JbLqisPL9xhfoUl9GvGTu5VS1S1H5VtErTeYXxnL7PTIr3cNjIbDMjI48LJfoOgtymT35KUdK3J0DxB68DqPaeK5QSEC/L0+6bizStRZ7BDnOngV/XfiVJnbSNYXX5IShQAAACuGn8QGUuQ4TOzkKcc891SV/CVDQ==</CipherValue>  

  4. </CipherData>  

  5. </EncryptedData>  

  6. lt;/connectionStrings>  


3.    解密
   解密该连接字符串也很简单
   aspnet_regiis.exe -pdf "connectionStrings" '你的web项目路径"


  解密后的结果&#xff1a;

  1. <connectionStrings>  

  2.    <add name="Sql" connectionString="Data Source=.;Initial Catalog=MySchool;Integrated Security=True" />  

  3. </connectionStrings>  



4.    后台代码读取配置文件web.config中数据库连接字符串的方法&#xff1a;

[c-sharp] view plain copy
  1. using System.Configuation;  

  2. …  

  3. protected void Page_Load(object sender, EventArgs e)  

  4. {  

  5.    lblMessage.Text = ConfigurationManager.ConnectionStrings["Sql"].ToString();  

  6. }  

  7. …  


   运行效果图&#xff1a;



5.    在连接字符串的加密和解密的过程中&#xff0c;需要注意一下几点。

  •     使用加密的连接字符串

   使用加密的连接字符串不需要编码解密&#xff0c;ASP.NET会自动对加密内容进行解密。

  •     加密和解密在同一台计算机上使用

   在加密过程中&#xff0c;使用了一个基于本机的密钥。这就意味着加密和解密必须在同一台计算机上进行&#xff0c;否则将不能解密。同时&#xff0c;在一台计算机上加密的配置&#xff0c;在另一台计算机上将不能正常使用。

  •     中文路径问题

   该命令对中文支持不是很好。如果站点的路径中有中文字符&#xff0c;也许不能正常加解密。


【网络参考】

1、C#中Web.Config加密与解密的方法_C#教程  http://www.jb51.net/article/35996.htm

2、.NET加密配置文件connectionStrings节点 - http://www.cnblogs.com/zfanlong1314/p/3974950.html

3、web.config本地加密解密方法_http://jingyan.baidu.com/article/95c9d20dac8f40ec4f756167.html

对web.config的ConnectionString加密

web.config配置文件中&#xff0c;有一些敏感数据希望被保护起来&#xff0c;例如数据库的连接串ConnectionString&#xff0c;默认情况下是明文显示的&#xff0c;例如&#xff1a;

1 <appSettings>2     <!--数据库链接-->3     <add key="ConnectionString" value="Data Source=127.0.0.1;Initial Catalog=Demo2012;User ID=sa;password=123456"/>4   </appSettings>

  经过加密之后&#xff0c;配置信息变为&#xff1a;

复制代码
 1 <appSettings configProtectionProvider="RsaProtectedConfigurationProvider"> 2     <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" 3       xmlns="http://www.w3.org/2001/04/xmlenc#"> 4       <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> 5       <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 6         <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> 7           <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> 8           <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 9             <KeyName>Rsa Key</KeyName>10           </KeyInfo>11           <CipherData>12             <CipherValue>FSEEyg/SUlE0SqTip30MSc9a/tUYJSDiJ3nDLkE1iGSYU3vo02KRhsTnbLWRSRLffGGWP65fUJJuj5+qiPNQNX0THjCajF43PrP28u9V1fkXuX/T5BxI4Rg2rjw6mSPLuZ1SaQOjJjXi8ArCYs+83qpCxvjml1UN74RlOpLs6qs=</CipherValue>13           </CipherData>14         </EncryptedKey>15       </KeyInfo>16       <CipherData>17         <CipherValue>0Qp07JkMSsyTmHADATQ+rkGCok21XBFH2zvtj4diSSsTNJhi3CzBYw6QfasdpyuG/zf+4RWh4aNJ/IrGavzeSyRa929zAv/RsYpR3GQROWt20zr6d7UJUfDgbm85KyZrQNXLwhcfEiUX5VMJg+g3OUczhiDS8YvQ+JjOCDQQPpv99sj8AT2eNCyJJpKWJpGSf0iBpJmkpNP6MOTYHEEmVQ==</CipherValue>18       </CipherData>19     </EncryptedData>20   </appSettings>
复制代码


  这么长一串&#xff0c;一定不会有人认出来你的数据库地址和登陆信息了   &#xff1a;&#xff09;


操作过程如下&#xff08;RsaProtectedConfigurationProvider加密&#xff09;&#xff1a;

1&#xff1a;运行cmd&#xff0c;并定位到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&#xff08;可以直接运行vs2005的命令提示工具&#xff0c;但是貌似vs2010默认指向的framework3.5里没有aspnet_regiis命令&#xff0c;为了避免有些人找不到&#xff0c;所以还是直接cmd比较好。&#xff09;

2&#xff1a;运行

1 aspnet_regiis -pef "appSettings" "D:\demo"   //显示"正在加密配置节&#xff0c;成功&#xff01;"

这里要注意一下&#xff0c;D:\demo是工程的路径&#xff0c;可以是绝对路径&#xff0c;也可以是网站的相对路径&#xff0c;具体方法可以参考aspnet_regiis的帮助。如果你把web.config放在d盘根目录下&#xff0c;那么路径就是"D:\\"。appSettings是要加密的节点名称&#xff0c;也可以针对某个节点的子节点进行加密&#xff0c;例如

1 aspnet_regiis -pef "system.web/authentication" "D:\demo"

加密完成后&#xff0c;除了视觉上变为复杂的字符串之外&#xff0c;使用上与加密前是完全相同的。解密时运行参数-pdf&#xff0c;例如&#xff1a;

1 aspnet_regiis -pdf "appSettings" "D:\demo"  //显示"正在解密配置节&#xff0c;成功&#xff01;"


经过加密的字符串&#xff0c;虽然可以在本机使用&#xff0c;但是在另外一台电脑上&#xff08;客户现场或服务器&#xff09;是无法直接使用的。需要进行一些配置。

1&#xff1a;创建秘钥容器&#xff08;pc-操作容器 -exp&#xff0c;可导出&#xff09;

1 aspnet_regiis -pc "MyKey" -exp

2&#xff1a;导出容器中的秘钥到xml中&#xff08;px操作容器文件&#xff0c;注意D:\\后面有一个空格&#xff0c;否则你找不到文件的  ^ ^&#xff09;

1 aspnet_regiis -px "MyKey" "D:\\ keys.xml" -pri

3&#xff1a;拷贝你的keys.xml文件到服务器上&#xff0c;并且导入秘钥。&#xff08;-pi导入容器里的秘钥&#xff09;

1 aspnet_regiis -pi "MyKey" “D:\keys.xml”

4&#xff1a;赋权限&#xff08;ASPNET权限&#xff09;

1 aspnet_regiis -pa "MyKey" "ASPNET"

5&#xff1a;修改web.config文件&#xff0c;增加&#xff1a;

复制代码
1  <configuration>2  <configProtectData defaultProvider="MyProtectedConfigurationProvider">3  <providers>4  <add name="MyProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider" cspProviderName="" useMachineContainer="true" useOAEP="false" keyContainerName="SharedKeys"/>5  </providers>6  </configProtectedData>7  </configuration>
复制代码

完成&#xff01;

 说了这么多&#xff0c;我累了你也累了。有没有简便一些的办法&#xff1f;有。开发时用明文&#xff0c;部署的时候在客户现场运行aspnet_regiis加密就可以了。&#xff08;省略号&#xff09;

asp.net对连接字符串加密解密

在部署项目的时候&#xff0c;我们总是需要加密配置文件中的ConnectionStrings或者appSettings配置节&#xff0c;从而防止用户数据库被泄漏。.NET Framework使用提供程序模型来加密配置节&#xff0c;框架包含两个ProtectedConfigurationProvider:一个是RsaProtectedConfigurationProvider另一个DpapiProtectedConfigurationProvider.  前者是默认的提供程序&#xff0c;我们尽可能去使用该种&#xff0c;因为它支持导入\导出加密的密钥&#xff0c;换句话说&#xff0c;可以从一个web服务器移动配置节到另一个web服务器&#xff0c;例如可以在你开发的机子上加密配置节&#xff0c;然后将应用部署到产品服务器。
  如果使用后者加密配置节&#xff0c;那么就不能在另一个web服务器解密配置节&#xff0c;如果希望在不同的服务器之间移动配置文件&#xff0c;那么应现在员服务器上解密&#xff0c;再在目标服务器上重新加密配置文件。
1.使用aspnet_regiis.exe工具加密配置节
对于加密web配置文件中一个配置节来说&#xff0c;这是最方便的手段&#xff0c;该工具位于

1 C:\Windows\Microsoft.NET\Framework\v2.0.50727


目录下
我们可以手工在cmd dos窗口中敲入路径使用该工具或者直接在开始菜单中找到Microsoft Visual Studio 2005-》Visual Studio Tools-》Visual Studio 2005 命令提示&#xff0c;打开该dos窗口&#xff0c;这里不需要输入aspnet_regiis.exe工具的路径
假如我们有个网站在D:\Projects\mywebsite中
我们需要加密该网站的webconfig的appSettings配置节的方法如下

1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"


以上我们使用的是绝对路径&#xff0c;当然也可以使用相对路径

1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"


-app表示指定应用程序的虚拟路径

再次打开该web.config&#xff0c;发现appSetting配置节已经加密了。


当然我们需要加密connectionStrings配置节只要加上面代码的 appSetting替换下就ok了
我们注意下 -pef&#xff08;Protect Encrypt Filepath&#xff09; 这个选项,它是用来加密指定路径下的web.config文件的指定配置节
当然还有解密啦....
我们可以使用-pdf选项解密配置节&#xff0c;还拿上面的例子

1 aspnet_regiis -pdf appSettings "D:\Projects\mywebsite"


虚拟路径

1 aspnet_regiis -pd appSettings -app /mywebsite


  假设我们使用RsaProtectedConfigurationProvider加密配置文件&#xff0c;现在需要从一个服务器复制一个加密配置文件到另一个服务器&#xff0c;则必须复制加密配置文件的密钥到新的服务器&#xff0c;否则应用程序就不能在新服务器读取加密后的配置文件
默认情况下&#xff0c;存放密钥的容器在下面的文件夹下&#xff1a;

1 \Document and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys


当然&#xff0c;你很有可能找不到该文件夹&#xff08;o(∩_∩)o &#xff09;&#xff0c;现在比如360的搬移打文件等工具&#xff0c;鬼知道&#xff0c;那些文件夹会不会移动到别的地方去了....慢慢找下

我的是在

1 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys


在MachineKeys目录下会有一些数字和字母组成的系统文件&#xff0c;这就是我们想找的哈


我们还必须配置一个新的密钥容器&#xff0c;导入密钥容器到新服务器&#xff0c;需要依次完成下面几个步骤


1-创建一个新的密钥容器

1 aspnet_regiis -pc "SharedKeys" -exp


SharedKeys是新的密钥容器&#xff0c;-exp说明该容器的密钥可以导出


2-配置应用程序使用新的密钥容器
web.config:

复制代码
1 <configuration>2 <configProtectData defaultProvider="MyProtectedConfigurationProvider">3 <providers>4 <add name="MyProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider" cspProviderName="" useMachineContainer="true" useOAEP="false" keyContainerName="SharedKeys"/>5 </providers>6 </configProtectedData>7 </configuration>
复制代码


3-导出SharedKeys容器中的密钥到一个keys.XML文件中

1 aspnet_regiis -px "SharedKeys" keys.xml -pri


4-把刚创建的keys.xml文件复制到目标服务器上&#xff0c;并导入密钥

1 aspnet_regiis -pi "SharedKeys" keys.xml

5-赋予asp.net应用程序访问密钥容器的权限

1 aspnet_regiis -pa "SharedKeys" "ASPNET"


详细链接&#xff1a;http://www.cnblogs.com/wayshan/archive/2012/04/09/web_config.html


本文链接:https://hqyman.cn/post/4050.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:





休息一下,本站随机推荐观看栏目:


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: