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编码串。