В C # вы можете использовать класс лицензирования , предоставленный Microsoft. Образец доступен по ссылке.
Обычно вы создаете класс, наследуемый от LicenseProvider, и вводите
[LicenseProvider(typeof(MyControlLicenseProvider))]
в качестве атрибута вашего класса, который вы хотели бы лицензировать. В вашей реализации ( MyControlLicenseProvider
) вы можете закодировать соответствующие методы для проверки лицензии в соответствии с вашими потребностями, а затем вызвать код
License license = LicenseManager.Validate(typeof(MyControl), this);
. Если лицензия не равна нулю, ваше приложение / элемент управления лицензируется.
Как заявляет сэр Грейстар, ни одна система не является надежной, и кто-то с необходимыми навыками может спроектировать себя вокруг вашей проверки. Не тратьте слишком много времени на внедрение жесткой системы, но и не упускайте возможность легко обойти ее. : -)
Использование хеша типа SHA или одной из хеш-функций MD и передача им некоторых ключевых данных можно использовать для создания простой проверки достоверности. Ваш метод проверки может делать что-то вроде
public override License GetLicense(LicenseContext context,
Type type,
object instance,
bool allowExceptions)
if (context.UsageMode == LicenseUsageMode.Designtime) {
// Creating a special DesigntimeLicense will able you to design your
// control without breaking Visual Studio in the process
return new DesigntimeLicense();
}
byte[] existingSerialKey = getExistingSerial();
// Algorithm can be SHA1CryptoServiceProvider for instance
byte[] data = HashAlgorithm.Create().ComputeHash(
username,
dateRequested,
validUntilDate,
// any other data you would like to validate
);
// todo: also check if licensing period is over here. ;-)
for (int l = 0; l < existingSerialKey.Length; ++l) {
if (existingSerialKey[i] != data[i]) {
if (allowExceptions){
throw new LicenseException(type, instance, "License is invalid");
}
return null;
}
}
// RuntimeLicense can be anything inheriting from License
return new RuntimeLicense();
}
. Этот метод возвращает пользовательскую лицензию , которая, например, имеет свойства, касающиеся лицензирования, такие как DateTime для времени при лицензировании заканчивается. Настройка не займет много времени, она хорошо работает как с WinForms, так и на сайтах ASP.NET и предотвратит (без каких-либо подразумеваемых гарантий) простую попытку нарушить ваше лицензирование.
Я никогда не встречал ничего похожего на стандарт в этом. Что я лично сделал бы, так это создать запись или что-то в этом роде, содержащее всю информацию о лицензии и о том, какие функции доступны до ввода ключа продукта, и как долго до истечения пробной версии или чего-то еще (это может быть сложно, поскольку вы не хочу сравнивать с системной датой, так как она может быть изменена пользователем). Затем вы хотите зашифровать эту запись (возможно, путем ее солирования и хеширования), чтобы функции могли быть разблокированы только при вводе определенного ключа продукта. Вы также можете случайным образом сгенерировать указанный ключ, хотя я бы сделал это в определенном формате, чтобы пользователь всегда мог распознать ключ продукта, когда ему его дают, и не путать его с номером счета-фактуры или чем-то еще.
Помните, что никакая система не является надежной, и кто-то на какой-то ОС каким-то образом найдет выход. Вероятно, это причина того, что я никогда не сталкивался с какими-либо стандартами, потому что ни один метод не является полностью безопасным. Вы просто должны сделать все возможное.