http://blog.csdn.net/jf_jifei/article/details/6527390

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

  • section表示要加密的配置节
  • physical_directory用于指定站点的物理路径。
  • virtual_directory用户指定虚拟路径。
  • provider指定加密提供程序。

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

2.    加密方法

运行Visual Studio 2008命令提示

加密后的结果

[xhtml] view plain copy

  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项目路径"

解密后的结果:

[xhtml] view plain copy

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


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

[c-sharp] view plain copy

  1. using System.Configuation;
  2. protected void Page_Load(object sender, EventArgs e)
  3. {
  4. lblMessage.Text = ConfigurationManager.ConnectionStrings["Sql"].ToString();
  5. }

运行效果图:

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

  • 使用加密的连接字符串

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

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

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

  • 中文路径问题

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

如何对web.config进行加密和解密的更多相关文章

  1. IOS, Android, Java Web Rest : RSA 加密和解密问题

    IOS, Android, Java Web Rest :  RSA 加密和解密问题 一对公钥私钥可以使用 OpenSSL创建, 通常 1024位长度够了. 注意: 1. 公钥私钥是BASE64编码的 ...

  2. C#中对Web.Config、App.Config字符串加密与解密的方法

    我们平常的项目里面的配置文件通常都是明文形式的存在,现在就是为了项目安全性增强,同时又显得高逼格点, 我们可以采用加密的方式,而我们C#很强大,因为他内置的一些指令方式,很方便而且使用起来还不用解密, ...

  3. 【转】Encrypt ConnectionString in Web.Config 【加密ASP.NET web.config数据库链接字串】

    原文链接:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config web.config中一般会存放 ...

  4. JAVA WEB实现前端加密后台解密

    最近在研究登陆密码的加密,下边上具体代码,只是给出核心代码,具体的代码视业务而定吧,给位有什么问题或者意见请留言. 加密方法用的是AES-128-CBC,BASE64用的是org.apache.com ...

  5. 加密解密技术—Web.config加密和解密

    阅读目录 一:我们为什么要对web.config配置文件中的配置节加密? 二:怎么样加密和解密? 三:实例 四:运行效果 一:我们为什么要对web.config配置文件中的配置节加密? 因为在我们的项 ...

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

    /// <summary> /// 保护web.config的加密和解密 /// </summary> public class ProtectHelper { /// < ...

  7. 加密web.config

    当我们要进行数据库的连接时,就会根据<%$ connectionsStrings:MyConnectionStringName %>这个表达式在Web.config文件中找到和MyConn ...

  8. web config数据库连接字符串加密

    ASP.NET web.config中,数据库连接字符串的加密与解密 ASP.NET web.config中,数据库连接字符串的加密与解密. 开始--->运行,输入cmd,接着输入以下内容 加密 ...

  9. 对web.config加密,和解密码详细说明

    可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码.数据库连接字符串和加密密钥).对配置信息进行加密后,即使攻击者获取了对配置文件的访问 ...

随机推荐

  1. Java第六次作业修改版

    import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class Draw ...

  2. coding题都在考察我们的什么技能

    其实不是都在考我们的算法设计,有的时候算法简单,但是coding却可能不那么简单,比如下面这道题目: 题:写一个把字符串的IP地址变成32位整数的函数,要求考察程序健壮性. 这题初看起来一点都不难,但 ...

  3. Mybatis 源码分析--crud

    增加源码分析-insert() --------------------------------------------------------------------- public int ins ...

  4. ios framework 简单制作

    在制作过程中遇到的一些问题跟大家分享下,直接上步骤 制作库有分模拟器框架和真机矿机  如果报错x86_64什么的字眼就是库里面没有包含模拟器框架 模拟器:iPhone4s~5 : i386 iPhon ...

  5. Android性能测试工具APT使用指南

    腾讯的安卓平台高效的性能测试工具APT(Android Performance Testing Tools),适用于开发自测和定位性能瓶颈,帮助测试人员完成性能基准测试.竞品测试. APT提供了CPU ...

  6. thoughtworks编程题

    微博看到vczh分享的thoughtworks的一道题目https://www.jinshuju.net/f/EGQL3D,代码写完之后才得知这个公司并不是我想的那样美好. 题目: FizzBuzzW ...

  7. LeetCode 094 Binary Tree Inorder Traversal

    方法一:(递归) class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int ...

  8. C#使用QQ邮箱发送邮件

    首先要开通QQ邮箱的STMP服务.QQ邮箱——设置——账户——开启SMTP服务. 需要引用: using System.Net; using System.Net.Mail; using System ...

  9. 字符编码详解及由来(UNICODE,UTF-8,GBK)[转帖]

    相信許多人對字符編碼都不是很了解,透過下文可以清晰的理解各种字符编码方式详解及由来. 一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS ...

  10. C#面向接口编程详解(1)——思想基础

    我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到 ...