2013-04-20 61 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