По моему опыту, подобные вопросы часто мотивируются одной из четырех причин:
- Ваше приложение подключается к ограниченной удаленной службе, такой как сервер базы данных.
- Вы не хотите, чтобы ваши пользователи связывались с настройками конфигурации, которые, в свою очередь, не должны оставаться конфиденциальными, пока они не изменены.
- Защита от копирования вашего собственного программного обеспечения.
- Защита от копирования данных.
Как Илмари Каронен написал в своем ответе , вы не можете делать в точности то, о чем просите, и это означает, в частности, что 3 и 4 не могут быть решены с помощью одной только криптографии.
Однако, если ваша причина для запроса - 1 или 2, вы в конечном итоге задаете вопросы, которые задаете, потому что вы приняли некоторые плохие решения на ранних этапах процесса проектирования. Например, в случае 1 вы не должны предоставлять доступ к ограниченной службе из систем, которым вы полностью не доверяете. Типичное безопасное решение - ввести промежуточный уровень, который является единственным клиентом для вашего ограниченного ресурса и который вы можете опубликовать.
В случае 2 лучшее решение часто заключается в использовании точно такой же логики для проверки ваших файлов конфигурации (или настроек реестра или чего-либо еще), когда они загружаются при запуске, как вы используете для проверки согласованности, когда пользователь вводит их используя предпочтительный интерфейс конфигурации пользователя. Если вы обнаружите несоответствие, просто откройте пользовательский интерфейс конфигурации и выделите проблему.