Получение доступа запрещено при попытке защитить данные с помощью 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)

С уважением, Винсент

Другие вопросы по тегам