尝试使用DPAPI保护数据时拒绝访问

时间:2012-11-13 13:03:51

标签: c# .net dpapi

我正在Windows 8上开发一个c#.net 3.5应用程序。

我需要使用DPAPI加密数据。它在我的所有机器上运行正常,但是从一台机器中我得到以下异常:System.Security.Cryptography.CryptographicException消息:访问被拒绝。

 byte[] bytes;
 bytes = ProtectedData.Protect(Encoding.UTF8.GetBytes(argsStr.ToString()), null, DataProtectionScope.CurrentUser);

当我将DataProtectionScope.CurrentUser更改为DataProtectionScope.LocalMachine时,它可以正常工作。

似乎有人拒绝当前用户访问以执行DAPI加密

我该怎么做才能解决这个问题?

失败的应用程序是在当前登录用户下运行的控制台应用程序。

使用提升的权限运行应用程序时,它仍然失败并且访问被拒绝。

我尝试重置登录密码,它解决了问题。

这样的事情怎么会发生?

2 个答案:

答案 0 :(得分:1)

在用户没有在Windows 7上定义密码的情况下,我遇到了同样的问题。解决方案是为用户设置密码。

答案 1 :(得分:0)

这是因为DPAPI的MasterKey不同步。 典型的原因是:

  • 密码管理更改(不提供旧密码而不是域名 - 网络用户管理员密码)
  • 第三方认证包

您可以使用CryptProtectData(CRYPTPROTECT_CRED_SYNC)在代码中手动同步MasterKey

的问候, 文森特