Получение доступа запрещено при попытке защитить данные с помощью DPAPI
Я занимаюсь разработкой приложения aC# .net 3.5 для Windows 8.
Мне нужно зашифровать данные с помощью DPAPI. он работает нормально на всех моих компьютерах, за исключением одного компьютера, где я получаю следующее исключение: System.Security.Cryptography.CryptographicException Сообщение: доступ запрещен.
byte[] bytes;
bytes = ProtectedData.Protect(Encoding.UTF8.GetBytes(argsStr.ToString()), null, DataProtectionScope.CurrentUser);
когда я меняю DataProtectionScope.CurrentUser на DataProtectionScope.LocalMachine, он работает нормально.
Похоже, что кто-то отказал текущему пользователю в доступе к предварительному шифрованию DAPI
Что я могу сделать, чтобы исправить эту проблему?
Сбой приложения - это консольное приложение, запущенное под текущим вошедшим пользователем.
При запуске приложения с повышенными привилегиями оно по-прежнему завершалось с ошибкой доступа.
Я попытался сбросить пароль для входа, и это решило проблему.
Как такое может случиться?
2 ответа
У меня была та же самая проблема в случае, когда у пользователя не было пароля, определенного в Windows 7. Решением было установить пароль для пользователя.
Это произошло из-за того, что MasterKey DPAPI не был синхронизирован. Типичные причины:
- пароль изменен в административном порядке (без предоставления старого и не в домене - пароль администратора сетевого пользователя)
- сторонний пакет аутентификации
Вы можете вручную синхронизировать MasterKey в коде, используя CryptProtectData(CRYPTPROTECT_CRED_SYNC)
С уважением, Винсент