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"];
4

2 回答 2

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,使用了一些密钥 - 如果没有这些密钥,第 3 方将拥有一堆无用的数据。

于 2013-04-20T17:07:05.600 回答
2

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

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

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

于 2013-04-20T17:48:15.320 回答