3

我正在 Windows 8 上开发 ac# .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 加密的访问权限

我能做些什么来解决这个问题?

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

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

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

怎么会发生这样的事情?

4

2 回答 2

2

发生这种情况是因为 DPAPI 的 MasterKey 不同步。典型的原因是:

  • 以管理方式更改密码(不提供旧密码且不在域中 - 网络用户管理员密码)
  • 第三方认证包

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

问候,文森特

于 2013-05-01T07:42:38.777 回答
2

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

于 2016-01-05T12:03:16.713 回答