c# - 尝试使用 DPAPI 保护数据时访问被拒绝

标签 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加密

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

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

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

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

怎么会发生这样的事情呢?

最佳答案

出现这种情况是因为DPAPI的MasterKey没有同步。 典型的原因是:

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

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

问候, 文森特

关于c# - 尝试使用 DPAPI 保护数据时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361242/

相关文章:

c# - 在这种情况下,静态或对象哪个更好?

security - 为什么要使用 RSA 进行 DPAPI 网络场加密?

security - 如何从 Windows Vault 凭据管理器存储和检索凭据?

c# - 是否可以重载 ShowDialog() 以便子窗体将信息作为输出参数返回?

c# - 尝试解密 Chrome cookie 时,DPAPI 失败并出现 CryptographicException

c# - 程序集绑定(bind)和重定向

c# - 删除具有特定名称和动态文件扩展名的文件

C#对象排序,多条件

c# - 有小数金额,如果存在,要修剪到 2 位小数

.net - 如何在 ASP.NET MVC 中拥有同名的文件夹和 Controller ?