那些年朋友劝,该知道的ASP.NET -如何加密ASP.NET配置数据

来源:互联网 发布:淘宝代销商品怎么刷单 编辑:程序博客网 时间:2024/05/16 18:53

ASP.NET 2.0推出了一个受保护的配置(protected configuration)特性,允许您使用数据加密API(DPAPI)或RSA加密对machine.config和web.config文件进行加密。开发者一直希望这种类型的功能,以便可以对连接字符串、账户证书等敏感数据加以保护。

可以进行加密的部分:

   appSettings:定义和存储定制应用值。

   connectionStrings:通过数据库连接字符串访问外部数据源。

   Identity:包含Web应用程序身份,其中可能包括模拟证书。

   SessionState:给当前应用程序配置会话状态设置。

这个工具包含大量的命令行选项,包括加密(pef)和解密(pdf)。您可以使用/?选项获得帮助。加密选项利用DPAPI加密数据。

加密

例:aspnet_regiis-pef "connectionStrings" "c:inetpubwwwroottrconfig"

   aspnet_regiis:ASP.NET IIS注册工具。

   -ped:加密一个配置文件配置部分的命令行选项。

    “connectionStrings”:被加密部分的名称。

    “c:inetpubwwwroottrconfig”:本地网站的物理地址。

解密

例:aspnet_regiis-pdf "connectionStrings" "c:inetpubwwwroottrconfig"

以上方法测试可以用,但存在一个问题:在IIS的配置界面内还是可以看到配置信息的,网站à属性àASP.NETà编辑配置

 

加密和解密配置节

可以使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 加密或解密 Web 配置文件的各节。在处理Web.config 文件时,ASP.NET 将自动解密已加密的配置元素。

Aspnet_regiis.exe 工具位于%windows%\Microsoft.NET\Framework\versionNumber 文件夹中。

加密 Web 配置节

要加密配置文件的内容,应将 Aspnet_regiis.exe 工具与 –pe 选项以及要加密的配置元素的名称一起使用。

使用–app 选项可标识将加密其 Web.config 文件的应用程序,使用 -site 选项可标识该应用程序所属的网站。

使用–prov 选项可标识将执行加密和解密的 ProtectedConfigurationProvider 的名称。如果未使用 -prov 选项指定提供程序,将使用配置为 defaultProvider 的提供程序。

注意

如果您使用的是指定自定义密钥容器的 RsaProtectedConfigurationProvider 实例,则必须在运行 Aspnet_regiis.exe 工具前创建密钥容器。

例:aspnet_regiis-pe "connectionStrings" -app "/SampleApplication" -prov"RsaProtectedConfigurationProvider"

注意

要解密和加密 Web.config 文件的某一节,ASP.NET 进程必须具有读取适当加密密钥信息的权限。

授予对 RSA 密钥容器的访问权限

默认情况下,RSA 密钥容器受到所在服务器上的NTFS 访问控制列表 (ACL) 的严密保护。这样能够限制可以访问加密密钥的人员,从而增强加密信息的安全性。

例:aspnet_regiis-pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"

 

C#对配置文件进行加密和解密

public void encryption()//加密{Configuration config =WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);ConfigurationSection configSection =config.GetSection("appSettings");if(!configSection.SectionInformation.IsProtected){configSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");config.Save();}} public void decryption()//解密 {Configuration config =WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);ConfigurationSection configSection =config.GetSection("appSettings");if(configSection.SectionInformation.IsProtected){configSection.SectionInformation.UnprotectSection();config.Save();}}


 

解密 Web 配置节

要解密已加密的配置文件内容,应将 Aspnet_regiis.exe 工具与 -pd 开关以及要解密的配置元素的名称一起使用。使用 –app 和 -site 开关可标识将解密其 Web.config 文件的应用程序。无需指定 –prov 开关来标识 ProtectedConfigurationProvider 的名称,因为该信息是从受保护配置节的 configProtectionProvider 属性中读取的。

例:aspnet_regiis -pd "connectionStrings" -app"/SampleApplication"

部分信息摘于:http://msdn.microsoft.com/zh-cn/library/zhhddkxy%28v=VS.80%29.aspx

 

还有一种简单的加密方法

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pwd,"MD5"); 

1、md5不是加密算法,而是散列算法,数据变换过程和结果是不可逆的,即无法从md5编码逆向生成原文。

2、称作加密的,一定需要相应的解密,即数据变换必须是可逆的,或称双向的;简单举几个例子来说明什么叫可逆和不可逆:A=B+5,则B=A-5,可逆,异或运算也是可逆的;A=B%5(A等于B除以5之后的余数),则A的范围是0~4,假设为3,能够确定B吗?不行,3、8、13等都成立,这就是不可逆,“与、或”运算也是不可逆的。

3、md5编码实际上就是md5散列值,该值可以视作原始数据的摘要或者指纹,可以想象一下:根据新闻的摘要,能够还原出新闻的全文吗?根据一个人的指纹,就能知道这个人的所有信息吗(如性别、身高、体重、肤色等)?

4、md5经常被误以为是加密的根源是以下场景:对各种系统中的身份认证来说,“用户名+密码”的模式非常简单,故大量存在,很多编程人员为了将“密码”不明示,就对密码串进行md5散列,在数据库或文件中保存md5编码;但是,千万要注意,真正到了鉴别用户身份是否合法的时候,不是通过早先记录下来的md5编码生成原文再与用户当场输入的密码串进行比较,而是将用户当场输入的密码串也实施md5变换,比较的是前后两次生成的md5编码串。