Возможный дубликат:
Лицензия на настольное приложение С#
Я хочу заблокировать программу после нескольких дней использования проб и, если пользователь приобретет лицензию, может использовать программу в течение нескольких месяцев.
Я не знаю, как это сделать. Идея состоит в том, чтобы сделать локальный временный ключ, когда программа установлена, и заблокировать ее после прошедших дней (проблема заключается в том, что пользователь может изменить дату и время своего компьютера. Философия программы должна использоваться онлайн и offline, поэтому я не могу сравнивать даты с моего сервера на компьютере).
И еще, как сделать лицензионный сервис. Я могу генерировать много серийных ключей, а затем, когда пользователь платит, я могу дать ему серийный номер, и каждый раз, когда запускается программа, я могу проверить, является ли серийный номер в моей веб-службе.
Я в хорошей дороге? Любые предложения?
Если это приложение написано на С#, и вы хотите написать свои собственные функции лицензирования, вам сначала нужно будет запутать исполняемый файл перед его развертыванием. Это делается для того, чтобы люди не читали ваш код CIL (хранящийся в .exe) с помощью дизассемблера.
Чтобы лицензировать программное обеспечение, вы захотите выбрать метод шифрования. Для такого шифрования симметричный метод по существу эквивалентен асимметричному методу (поскольку вы должны предоставить ключ в любом случае). Метод шифрования можно выбрать с помощью
public enum EncryptionAlgorithm { Des = 1, Rc2, Rijndael, TripleDes };
для каждого из методов и их деталей, см. Википедию. Алгоритм шифрования Rijndael был разработан для замены старого алгоритма DES. Подобно DES, это блок-шифр. Он использует 128-битные, 192-битные или 256-битные ключи и является хорошим выбором. В дальнейшем я буду предполагать, что вы не будете хранить ключ шифрования в коде (жестко закодированный), но поставляйте его в отдельный файл ( "ключ продукта" ); поэтому вы предоставите два файла лицензии ключ продукта, чтобы включить дешифрование и зашифрованный файл лицензии.
После того, как вы выбрали метод шифрования, часто приходится использовать хэш или алгоритм для работы с ключом продукта/вектором инициализации (IV); вы берете 128-битный ключ (например) и скремблируете его с помощью некоторого метода/преобразования. Ключ (который случайно/псевдослучайно генерируется для каждого пользователя, для которого вы развертываете программное обеспечение) затем используется для генерации IV.
Затем вы используете "случайный" ключ, IV и выбранный метод шифрования для шифрования некоторого текста лицензии (который включает даты лицензии).
internal ICryptoTransform GetCryptoServiceProvider(byte[] bK, byte[] iVec){ ... }
Чтобы дешифровать файл с помощью вашего метода, вы, в основном, выполняете обратный процесс. Одно замечание о лицензировании заключается в том, что вы не должны тратить слишком много времени на беспокойство о том, как люди взламывают программное обеспечение. Сделайте это очень сложно, используя метод, подобный выше, но не вкладывайте слишком много времени в сложную методологию, потому что, если какой-то (по общему признанию, очень талантливый) хакер хочет взломать ваш код, скорее всего, он это сделает. Более того, вы должны предположить, что пользователь не нарушит закон и не будет делиться файлами лицензий! Я не могу комментировать опыт использования внешней компании для запуска лицензирования вашего кода (я всегда писал свой собственный), однако это, вероятно, будет дорогостоящим вариантом.
Надеюсь, это поможет.
Хотя это сильно зависит от ваших точных требований, целевой технологии (Winforms, WPF, Silverlight и т.д.), я бы предложил использовать сторонний компонент лицензирования, такой как Quick License Manager, Лицензирование Pro dotNet.
В то время как ваше собственное решение будет дешевле, вероятность его взлома или обхода намного выше. Использование стороннего решения означает, что у вас есть внешняя команда или компания, предназначенная для обеспечения безопасности и надежности модели лицензирования.
С уважением,