加密web.config文件中的<appsettings>标签</appsettings>

时间:2013-04-20 16:53:45

标签: c# .net encryption key

我最近遇到过这篇文章,它描述了加密web.config文件中 connectionString 标记的过程:

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

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

我的问题是,如果我将项目提供给将在另一台计算机上运行的其他人,他们是否可以使用反向流程来解密web.config中的 appSettings 标记使用aspnet_regiis工具的文件?如果没有,项目是否仍然可以在他的机器上运行?

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

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

2 个答案:

答案 0 :(得分:4)

文档确认,根据加密提供商的说法,我可能是对的:

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

  

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

因此,对于RSA,使用了一些密钥 - 如果没有这些密钥,第三方将拥有无用的数据。

答案 1 :(得分:2)

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

鉴于您发布了web.config的加密版本,对称加密实际上无法解密,因为它是特定于机器的(在一台计算机上加密,只能在该特定计算机上解密,甚至可以由特定用户解密)。

非对称加密(RSA)允许您安全地共享web.config。如果您提供私钥,则收件人将能够解密内容。如果你不共享私钥,除了随机垃圾之外几乎不可能获得任何东西。