Лучшее решение - сохранить MD5 в файле конфигурации. Но вместо того, чтобы MD5 был просто файлом конфигурации, также включите в MD5 какое-то секретное значение «ключа», например, фиксированный guid.
write(MD5(SecretKey + ConfigFileText));
Затем вы просто удаляете этот MD5 и перефразируете файл (включая ваш секретный ключ). Если MD5 одинаковы, никто его не модифицировал. Это не позволяет кому-либо изменить его и повторно применить MD5, поскольку он не знает ваш секретный ключ.
Имейте в виду, что это довольно слабое решение (как и то, которое вы предлагаете), поскольку они могут легко отследить вашу программу, чтобы найти ключ или место хранения MD5.
Лучшим решением было бы использовать систему с открытым ключом и подписать файл конфигурации. Опять же, это слабо, поскольку для этого требуется, чтобы закрытый ключ хранился на их локальной машине. Практически все, что содержится на их локальном ПК, можно обойти с достаточным усилием.
Если вы ДЕЙСТВИТЕЛЬНО хотите сохранить информацию в вашем исполняемом файле (что я бы не рекомендовал), то вы можете просто попытаться добавить ее в конец EXE-файла. Это обычно безопасно. Модификация исполняемых программ - это вирус, похожий на поведение, и большая часть безопасности операционной системы также попытается остановить вас. Если ваша программа находится в каталоге Program Files, а ваш файл конфигурации находится в каталоге Application Data, а пользователь вошел как пользователь без прав администратора (в XP или Vista), вы не сможете обновить EXE.
Обновление: Мне все равно, используете ли вы асимметричное шифрование, RSA или квантовую криптографию, если вы храните свои ключи на компьютере пользователя (что вы должны делать, если только Вы все маршрутизируете через веб-сервис), тогда пользователь может найти ваши ключи, даже если это означает проверку регистров на процессоре во время выполнения! Вы только покупаете себе умеренный уровень безопасности, поэтому придерживайтесь чего-то простого. Чтобы предотвратить изменение, предложенное мной решение является лучшим. Чтобы предотвратить чтение, зашифруйте его, а если вы храните свой ключ локально, используйте AES Rijndael.
Обновление: В качестве альтернативы FixedGUID / SecretKey может быть сгенерирован во время установки и сохранен где-то в секрете в реестре. Или вы можете генерировать его каждый раз, когда вы используете его из конфигурации оборудования. Тогда вы становитесь все сложнее. То, как вы хотите сделать это, чтобы обеспечить умеренные уровни аппаратных изменений, состояло бы в том, чтобы взять 6 разных подписей и хэшировать ваш файл конфигурации 6 раз - по одному с каждой. Объедините каждое из них со вторым секретным значением, таким как GUID, упомянутый выше (глобальный или сгенерированный при установке). Затем при проверке вы проверяете каждый хеш отдельно. Пока у них есть 3 из 6 (или какой бы ни была ваша терпимость), тогда вы принимаете это. В следующий раз, когда вы напишите это, вы хешируете его с новой конфигурацией оборудования. Это позволяет им постепенно менять аппаратное обеспечение и получать совершенно новую систему. , , Может быть, это слабость. Все сводится к вашей терпимости. Существуют вариации, основанные на более жестких допусках.
ОБНОВЛЕНИЕ: Для системы кредитных карт вы можете подумать о реальной безопасности. Вам следует воспользоваться услугами консультанта по безопасности и криптографии . Больше информации необходимо обменять. Они должны проанализировать ваши конкретные потребности и риски.
Кроме того, если вы хотите обеспечить безопасность с помощью .NET, вам сначала нужно начать с действительно хорошего обфускатора .NET (, просто Google it ). Сборка .NET - это способ легко разобрать и получить исходный код и прочитать все ваши секреты. Не для того, чтобы звучать как испорченная запись, но все, что зависит от безопасности системы вашего пользователя, в корне ошибочно с самого начала.