DataProtectionScope.CurrentUser加密似乎不适用于多台计算机

时间:2010-06-28 18:03:14

标签: c# .net security encryption

我正在尝试使用.NET的ProtectedData.Protect方法加密和解密一些文本文件数据。我希望能够在一台机器上加密文本(并将其保存到文件中)并在另一台机器上解密文本。这些机器都在同一个域中,并且在相同的用户名下运行相同的服务,所以我认为使用DataProtectionScope.CurrentUser将允许任一服务加密和解密文件。

当服务号2尝试解密文件时,它会抛出“无法在指定状态下使用的密钥”。其他网站表明,当假冒行为没有正确完成时会出现这种问题,但没有模仿。两个服务都在同一个AD帐户下运行。在我看来,服务使用不同的密钥来加密数据,但我不知道为什么会发生这种情况,因为它们在同一个帐户下运行。

还有其他人遇到过这种问题吗?

我用来加密和解密的代码基本上是:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

用户必须拥有漫游资料。

在DPAPI函数下的Windows API文档CryptProtectData function中,有以下评论:

  

...解密通常只能在加密数据的计算机上完成。但是,具有漫游配置文件的用户可以解密来自网络上另一台计算机的数据。