我正在尝试使用.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
谢谢!
答案 0 :(得分:1)
用户必须拥有漫游资料。
在DPAPI函数下的Windows API文档CryptProtectData function中,有以下评论:
...解密通常只能在加密数据的计算机上完成。但是,具有漫游配置文件的用户可以解密来自网络上另一台计算机的数据。