Итак, я пытаюсь использовать метод Unprotect в System.Security.Cryptography.ProtectedData и продолжаю получать исключение:
cryptographicexception key not valid for use in specified state
Я думаю, что это связано с DataProtectionScope (но я не на 100%).
Этот метод работает, если я вхожу в систему и запускаю исполняемый файл службы в режиме DEBUG, что для меня означает, что он будет работать под «текущим пользователем». Однако, если я попытаюсь запустить фактическую службу Windows, которая работает под учетной записью LocalSystem, она не сгенерирует предыдущее упомянутое исключение.
Метод:
ProtectedData.Unprotect(Byte[] byteArray, <some_password_salt>, DataProtectionScope.CurrentUser)
Перечисление DataProtectionScope содержит только CurrentUser или LocalMachine в качестве ваших параметров. Я не уверен, что было бы лучшим вариантом для решения этой проблемы.
Я попытался установить его на DataProtectionScope.LocalMachine, который, согласно статье MSDN, любой процесс, запущенный на машине, должен иметь возможность снимать защиту данных. Но не делает.