我正在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加密
我该怎么做才能解决这个问题?
失败的应用程序是在当前登录用户下运行的控制台应用程序。
使用提升的权限运行应用程序时,它仍然失败并且访问被拒绝。
我尝试重置登录密码,它解决了问题。
这样的事情怎么会发生?
答案 0 :(得分:1)
在用户没有在Windows 7上定义密码的情况下,我遇到了同样的问题。解决方案是为用户设置密码。
答案 1 :(得分:0)
这是因为DPAPI的MasterKey不同步。 典型的原因是:
您可以使用CryptProtectData(CRYPTPROTECT_CRED_SYNC)在代码中手动同步MasterKey
的问候, 文森特