2010-06-28 34 views
6

我試圖使用.NET的ProtectedData.Protect方法加密和解密一些文本文件數據。我希望能夠在一臺機器上加密文本(並將其保存到一個文件中)並在另一臺機器上解密文本。這兩臺機器都在同一個域中,並且都在相同的用戶名下運行相同的服務,所以我認爲使用DataProtectionScope.CurrentUser將允許任一服務對文件進行加密和解密。DataProtectionScope.CurrentUser加密似乎不能跨機器

當服務二號試圖解密該文件時,它會拋出一個「密鑰在指定狀態下無效」。其他網站表明,這種問題發生在模仿不正確的情況下,但沒有模仿。這兩種服務都在同一個AD帳戶下運行。它在我看來像服務使用不同的密鑰來加密數據,但我不知道爲什麼會發生這種情況,因爲他們在同一個帳戶下運行。

有沒有其他人遇到這種問題?

我使用加密和decypt的代碼基本上是:

byte[] bytes = Encoding.Unicode.GetBytes(password); 
byte[] protectedPassword = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser); 
return Convert.ToBase64String(protectedPassword); //then I write this to a file 

謝謝!

+3

這也許可以解釋你的情況:http://support.microsoft.com/kb/309408#4 – Toby 2010-06-28 18:14:25

+0

難道他們都在同一個*域中運行*帳戶,或者他們根據該恰好有本地戶口相同的用戶名和密碼? – 2011-10-14 00:16:45

回答

1

用戶必須擁有漫遊配置文件。

在爲DPAPI功能,CryptProtectData function下面的Windows API的文檔,有此評論:

...解密通常只能在數據被加密的計算機上完成。但是,具有漫遊配置文件的用戶可以解密來自網絡上另一臺計算機的數據。