我正在 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/