Хеширование является односторонней операцией: вы не можете декодировать хэшированное значение.
Здесь вы, вероятно, захотите сделать следующее: проверить хеш: создать новый хэш, когда ваша программавыполняется в системе клиента с использованием «живых» значений параметров и убедитесь, что сгенерированный хэш равен тому, который вы дали клиенту в качестве ключа.
Это означает, что вы не сможете включитьв хэше нет никакой информации, которую вы не можете надежно обнаружить, когда ваша программа работает на клиенте.К сожалению, «дата истечения срока действия» и «количество штук» попадают в эту категорию.
Если вам необходимо проверить такую информацию, то хеширование не подходит, и вместо этого вам нужно будет шифровать .Шифрование доступно в двух вариантах: симметричное и ассиметричное.
Симметричное шифрование означает, что секретный ключ должен быть известен вашему приложению, чтобы он мог расшифровать код проверки, что, в свою очередь, означает, что любой, имеющий умеренные рабочие знаниякак такие вещи смогут взломать его и сгенерировать любой код проверки.
В асимметричном шифровании у вас есть закрытый ключ (для шифрования) и открытый ключ для расшифровки.Нет проблем, если вы сделаете этот открытый ключ доступным для всех, поэтому при таком подходе невозможно создать кейген для вашей программы.
Конечно, это не означает, что ваше приложение будет защищено от взлома, так какдействительно очень легко изменить код управляемого приложения, чтобы полностью пропустить проверку кода.
Вопрос, который вы задали, на самом деле может быть червем, и на него нет однозначного ответа.Возможно, вы захотите взглянуть на этот вопрос: https://stackoverflow.com/questions/5132943/licensing-system-for-net и перейти по десяткам ссылок на похожие вопросы здесь, на SO.