来自 威尼斯国际官方网站 2019-09-19 08:12 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

config数据库连接字符串加密,VS开发程序用户防范

  五个支付的系统程序从须求、设计到打包、客户选用的长河中,安全主题材料直接是开拓者关心的点子。对于顾客来讲,不思虑加密工具(如加密敏感等),面临的是二个系统的顺序零部件集结及每一种的布置文件( 如App.Config / Web.Config)。在那之中,涉及到安全堤防难点如App.Config配置文件,里面会含有众多信息,包括最不想让顾客理解的服务器地址、登陆名和密码等,特殊的公文除却。本篇小说会进行三种方法来拍卖安全主题素材。

 

  (1)假诺只是简单的防使用人口的话,那么你能够思索在appsetting或其余的配置节中放加密后的连续字符串,然后在运用的地点先解密再选择,这里我介绍下DES加解密的办法(密匙为8位字节)。

ASP.NET web.config中,数据库连接字符串的加密与解密

威尼斯国际官方网站 1威尼斯国际官方网站 2

 

 1 /// <summary> 
 2         /// DES加密,密钥为8位字符 
 3         /// </summary> 
 4         /// <param name="strEncrypt">需要加密的字符串</param> 
 5         /// <param name="strKey">8位的密钥</param> 
 6         /// <returns></returns> 
 7         public static string DesEncrypt(string strEncrypt, string strKey) 
 8         { 
 9             if (string.IsNullOrEmpty(strEncrypt)) return null; 
10             try 
11             { 
12                 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
13                 byte[] inputByteArray = Encoding.Default.GetBytes(strEncrypt); 
14                 des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); 
15                 des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); 
16                 MemoryStream ms = new MemoryStream(); 
17                 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); 
18                 cs.Write(inputByteArray, 0, inputByteArray.Length); 
19                 cs.FlushFinalBlock(); 
20                 StringBuilder ret = new StringBuilder(); 
21                 foreach (byte b in ms.ToArray()) 
22                 { 
23                     ret.AppendFormat("{0:X2}", b); 
24                 } 
25                 ret.ToString(); 
26                 return ret.ToString(); 
27             } 
28             catch 
29             { 
30                 return null; 
31             } 
32         } 

ASP.NET web.config中,数据库连接字符串的加密与解密。

DES加密,密钥为8位字符

发端--->运营,输入cmd,接着输入以下内容

威尼斯国际官方网站 3威尼斯国际官方网站 4

加密:

 1 /// <summary> 
 2         /// DES解密,密钥为8为字符 
 3         /// </summary> 
 4         /// <param name="strDecrypt">需要加密的字符串</param> 
 5         /// <param name="strKey">8位的密钥</param> 
 6         /// <returns></returns> 
 7         public string DesDecrypt(string strDecrypt, string strKey) 
 8         { 
 9             if (string.IsNullOrEmpty(strDecrypt)) return null; 
10             try 
11             { 
12                 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
13                 byte[] inputByteArray = new byte[strDecrypt.Length / 2]; 
14                 for (int x = 0; x < strDecrypt.Length / 2; x++) 
15                 { 
16                     int i = (Convert.ToInt32(strDecrypt.Substring(x * 2, 2), 16)); 
17                     inputByteArray[x] = (byte)i; 
18                 } 
19                 des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); 
20                 des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); 
21                 MemoryStream ms = new MemoryStream(); 
22                 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); 
23                 cs.Write(inputByteArray, 0, inputByteArray.Length); 
24                 cs.FlushFinalBlock(); 
25                 return System.Text.Encoding.Default.GetString(ms.ToArray()); 
26             } 
27             catch 
28             { 
29                 return null; 
30             } 
31         } 

C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_regiis.exe -pef "connectionStrings" "你的Web项目路径"

DES解密,密钥为8为字符

解密:

关于DES加解密的密匙的收获,一般是内部职员掌握控制,可访谈服务器获取,安全上更有保证。

C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_regiis.exe -pdf "connectionStrings" "你的Web项目路径"

那么有了上边加密后的一群数据,怎么着转移对应配备文件中的某些配置节上的数码,微软提供System.Configuration.dll组件来操作App.Config配置文件等数码将其管理,如:

.NET为版本的门道自行修改,当中connectionStrings连接字符串的名目。(版本和调谐的安顿相关联)
connectionStrings>
<add name="Conn" connectionString="server=. ;database=UserDB;integrated security=sspi" />
</connectionStrings>

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["配置节"].Value = strDesEncrypt;//DES加密后的数据
config.Save();

1.在Dos命令窗口中施行命令:

 瑕疵:安全性低,局限于非Computer操小编,对于贰个业务繁琐的系统不合实际。

C:Documents and SettingsAdministrator>C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_regiis -pef "connectionStrings" "E:sjzbWebSite1"
2.命令成功做到之后会在C:Documents and SettingsAll UsersApplication DataMicrosoftCryptoRSAMachineKeys 中生成贰个密钥文件.该文件在区别的机械上是差异的.在该公文上点右键,选属性,在平安属性页上,将NETWO哈弗K_SE奥迪Q5VICE组增多进去,给读取权限.

   提供参照他事他说加以考察网址:

3.比如连接字符串中的客户名和口令必要修改,则用上面包车型地铁授命将webconfig文件解密.然后再行下面的加密步骤就能够

  (2) 默许情形下,大家必要对App.config文件里的connectionStrings或别的安排节片断进行加密管理,ASP.NET IIS 注册工具 (Aspnet_regiis.exe)能够胜任那些工作,但以此工具只可以针对ASP.NET的Web.config文件,难道大家就从不章程了吧?答案自然是或不是定的。

C:Documents and SettingsAdministrator>C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_regiis -pdf "connectionStrings" "E:sjzbWebSite1"

  配置选项:

正文来源CSDN博客,转发请标记出处:

-pdf section webApplicationDirectory 对点名物理(非虚构)目录中的 Web.config 文件的内定配置节进行解密。

在代码中表达是不是早就j加密:

-pef section webApplicationDirectory 对点名物理(非虚构)目录中的 Web.config 文件的钦定配置节进行加密。

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

-pdf 和-pef 参数是对点名的情理目录里的Web.config文件进行加密,大家得以先将App.config文件改名字为Web.config,通过那多个参数便足以“骗”过系统,让它将钦赐的配备节  实行加密,大家只需求将加密后的文书名改回App.config就能够,大家来尝试一下:

ConfigurationSection configSection = config.GetSection("connectionStrings");

 第一步:先将引得下的App.config改名称为Web.config。

if (configSection.SectionInformation.IsProtected)

 第二步:张开SDK命令提醒,输入指令:aspnet_regiis -pef "配置节" "目录",以本身的花色为例,加密前的config文件内容如下:

...{//要是已经加密,就毫无再加密了

  

configSection.SectionInformation.UnprotectSection();

1<?xml version="1.0" encoding="utf-8"?>
 2<configuration>
 3  <configSections>
 4    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
 5  </configSections>
 6  <dataConfiguration defaultDatabase="Connection String" />
 7  <connectionStrings>
 8    <add name="Connection String" connectionString="Database=LocomotiveStat;Server=10.167.61.49;User ID=sa;Password=sa;"
 9      providerName="System.Data.SqlClient" />
10  </connectionStrings>
11</configuration>

config.Save();

输入指令:aspnet_regiis -pef "你要加密的【配置节】" "你要加密的【目录】",加密后的config文件内容如下:

}

1<?xml version="1.0" encoding="utf-8"?>
 2<configuration>
 3  <configSections>
 4    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
 5  </configSections>
 6  <dataConfiguration defaultDatabase="Connection String" />
 7  <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
 8    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
 9      xmlns="http://www.w3.org/2001/04/xmlenc#">
10      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
11      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
12        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
13          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
14          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
15            <KeyName>Rsa Key</KeyName>
16          </KeyInfo>
17          <CipherData>
18            
<CipherValue>g2QFQqbHU1L6WUPYqjADqFAvHcdq/7dqCd1U9GlQFEi/nHDVHjqsWvjNywOZtQQg7Q/yW7g8xlRCo0h2+yYd/tQTNoVMu/RKdJmSjZMnmnwpWq+S2VEWK4U106JQwLCfBR/bAF4DHvG47B9KB0JbRfXBt5V2wJVaAI9u3kzuj50=</CipherValue>
19          </CipherData>
20        </EncryptedKey>
21      </KeyInfo>
22      <CipherData>
23        
<CipherValue>blwV/ZW1izFZL80YL5RkcjrIjWkQ0L1gJhgZbxEzzTgOcT24ihrAnv3/rDCG+WIZ7TL5D/rMm7dQwkIsij1Sh3befg6F3+pxcW4oe1w/bovIKuzjs3tokUpBvTTj+fsCs2W/MWUhQaWMKQWkHfS2Ajt6gL6MTYtb3pfQUp0pdHbeRxoqdiAksQ1Zzsi1FtRTi7gTT7hnpF0pJs+W9mxTVDMO/qSZXfXLOEMIs/A5ExcfvR5GjpaPuDeLuSsCN3XtjaiXzaDQ3It7j+r66+L2C0xvEhbT9SsG</CipherValue>
24      </CipherData>
25    </EncryptedData>
26  </connectionStrings>
27</configuration>

else

  本人也随意找了个布局文件式下了,成功了。

...{

威尼斯国际官方网站 5

configSection.SectionInformation.ProtectSection ("DataProtectionConfigurationProvider");

 

config.Save();

 威尼斯国际官方网站 6

}

由此可知,我们早就变成了任务,未来只须要将App.config文件名改回Web.config就能够,在应用程序项目中没有必要对该文件实行解密操作,.NET框架会活动替大家成功,若是想解密该文件也非常的粗略,在SDK命令提示里输入aspnet_regiis -pdf "配置节" "目录"即可。

 

  仿效网站如:

加密后解密出现找不到迷失错误!

  希望本篇文章对大家有早晚的支援,以上有不足之处,或有其余更合理的不二等秘书技请留言赐教。

咱俩即使想对web.config的数据库连接字符串实行加密的话,那么这里提供了四个格局。

  A young ilder ~ An old baggar !

方法一、
  使用“DataProtectionConfigurationProvider”方式加密,创制test.aspx文件,代码如下:
 供给增添引用
 using System.Web.Configuration;
 using System.IO;

 //加密
 protected void Button1_Click(object sender, EventArgs e)
  {
  Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
  ConfigurationSection section = config.GetSection("connectionStrings");
   
  if (section != null && !section.SectionInformation.IsProtected)
  {
  section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
  config.Save();
  }

  }
 //解密
  protected void Button2_Click(object sender, EventArgs e)
  {
  Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
  ConfigurationSection section = config.GetSection("connectionStrings");

  if (section != null && section.SectionInformation.IsProtected)
  {
  section.SectionInformation.UnprotectSection();
  config.Save();
  }
  }

小结:此办法很便利,何况非常粗略,但安全性没有密钥加密高。

方法二、
 使用“OdysseySAProtectedConfigurationProvider”情势来加密
 test.aspx程序文件宗旨如上,
 把
 section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
 改成
 section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
 但这一年你拜见网址的时候很有不小大概会产出

 表明: 在管理向该央浼提供劳动所需的配备文件时出错。请检查下边的一定错误详细音讯并方便地修改配置文件。 
 深入分析器错误新闻: 未能行使提供程序“TiguansaProtectedConfigurationProvider”举办解密。提供程序重临错误消息为: 打不开 路虎极光SA 密钥容器。
 
 那样的谬误,消除办法是:
 进dos运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITYNETWORK SERVICE"
  如果运维出错,必要把目录 C:WINDOWSMicrosoft.NETFrameworkv2.0.50727 归入景况变量path中。
  此时就能够成功访谈网站了。
  一样能够由此命令行来贯彻“瑞虎SAProtectedConfigurationProvider”加密
  
  注意:你也足以不运维 aspnet_威尼斯国际官方网站 ,regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITYNETWO宝马7系K SEWranglerVICE"命令来注册暗中同意的 HighlandersaProtectedConfigurationProvider 的LX570SA 密钥容器
  方法如下:
  1)成立三个可导出的rsa密钥容器,命名称为Key

aspnet_regiis -pc "Key" -exp

2)在您要加密的音信前边钦定密钥容器,如:

<configProtectedData> 

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:config数据库连接字符串加密,VS开发程序用户防范

关键词: