2013-04-20 59 views
3

我最近遇到本文描述的web.config文件加密的ConnectionString标签的过程:在web.config文件加密<appSettings>标签

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

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

我的问题是,如果我给这个项目给别人谁将会在不同的机器上运行它,他们将能够使用反向过程中使用的工具ASPNET_REGIIS解密的appSettings在web.config文件标签?如果没有,该项目是否仍能在他的机器上工作?

这是我如何获取我的代码加密密钥:

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

我敢打赌,它使用加密服务器的一些盐值,以确保它不能在另一台机器上解密。阅读我认为的文档... – Charleh 2013-04-20 17:05:27

回答

3

文件确认的是,根据加密提供我可能是正确的:

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使用一些密钥 - 并且没有这些密钥,第三方将有无用的数据混乱。

+0

因此,如果我使用DataProtectionConfigurationProvider,只有我的机器可以解密web.config文件的加密内容。这意味着如果我将项目发送给其他人,它将无法工作。我理解正确吗? – Matthew 2013-04-20 17:10:35

+0

@Matthew,这是正确的。但是,您可以使用triple des来对其进行加密,并且该密钥可以轻松地与其他开发人员共享。 – 2013-04-20 17:14:50

+0

+1对此有非常好的理解,我错过了这一点,并确信它可以在其他人机器上解密。 – 2013-04-20 17:15:57

2

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

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

非对称加密(RSA)允许您安全地共享web.config。鉴于您提供了一个私钥,收件人将能够解密该内容。如果你不共享私钥,实际上不可能得到任何东西,但随机垃圾。

+0

谢谢你的回答:) – Matthew 2013-04-20 20:04:46