在web.config文件中加密<appSettings>标签

3

我最近看到了一篇文章,介绍了在web.config文件中加密connectionString标签的过程:

http://chiragrdarji.wordpress.com/2008/08/11/how-to-encrypt-connection-string-in-webconfig/

我使用了相同的方法来加密包含我的加密密钥的web.config文件中的appSettings标签。

我的问题是,如果我把项目交给另一个人在不同的机器上运行,他们能否使用aspnet_regiis工具反向解密web.config文件中的appSettings标签?如果不能,该项目是否仍能在其计算机上正常工作?

这是我在代码中检索加密密钥的方式:

string block_size = ConfigurationManager.AppSettings["rgbIV"];
string encryption_key = ConfigurationManager.AppSettings["key"];

我打赌它使用加密服务器中的某些盐值,以确保它无法在另一台机器上解密。我猜得读一下文档就知道了... - Charleh
2个回答

4

文档确认根据加密提供商的不同,我的观点可能是正确的:

http://www.asp.net/web-forms/tutorials/data-access/advanced-data-access-scenarios/protecting-connection-strings-and-other-configuration-information-vb

注意:由于我们使用了DPAPI提供程序,它使用特定于计算机的密钥,因此您必须从提供Web页面的同一台计算机上运行aspnet_regiis.exe。例如,如果您从本地开发计算机运行此命令行程序,然后将加密的Web.config文件上传到生产服务器,则生产服务器将无法解密连接字符串信息,因为它是使用特定于您的开发计算机的密钥进行加密的。RSA提供程序没有此限制,因为可以将RSA密钥导出到另一台计算机。

因此,RSA使用了一些密钥 - 没有这些密钥,第三方将得到一堆无用的数据。


如果我使用DataProtectionConfigurationProvider,那么只有我的机器才能解密web.config文件中的加密内容。这意味着如果我将项目发送给其他人,它将无法工作。我理解得对吗? - Matthew
@Matthew,你说得对。不过,你可以使用三重DES来加密它,而那个密钥可以轻松地与其他开发人员共享。 - Mike Perrenoud
@MichaelPerrenoud 感谢大家的回答和建议。我非常感激 :) - Matthew
@Charleh 谢谢 :) 只是需要确认我是否理解正确 :) - Matthew
@Matthew,这是三重DES加密的示例。http://www.codeproject.com/Articles/7580/Making-TripleDES-Simple-in-Visual-Basic-NET - Mike Perrenoud
显示剩余2条评论

2

加密有两种类型:对称加密和非对称加密。

若您发布的 web.config 文件是使用对称加密算法加密,则无法通过解密实现实际应用,因为该算法是基于机器特定性质的(在一台机器上加密的数据只能在同一台机器上解密,甚至只能由具体用户解密)。

非对称加密算法(RSA)可以让您安全地分享 web.config 文件。只要提供私钥,接收方便可解密文件内容。若您不分享私钥,则几乎无法获得除随机垃圾以外的任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接