Разработка лицензий в C# - где я запускаю? [закрытый]

17
задан Abel 18 May 2014 в 16:23
поделиться

2 ответа

В 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 и предотвратит (без каких-либо подразумеваемых гарантий) простую попытку нарушить ваше лицензирование.

21
ответ дан 30 November 2019 в 13:33
поделиться

Я никогда не встречал ничего похожего на стандарт в этом. Что я лично сделал бы, так это создать запись или что-то в этом роде, содержащее всю информацию о лицензии и о том, какие функции доступны до ввода ключа продукта, и как долго до истечения пробной версии или чего-то еще (это может быть сложно, поскольку вы не хочу сравнивать с системной датой, так как она может быть изменена пользователем). Затем вы хотите зашифровать эту запись (возможно, путем ее солирования и хеширования), чтобы функции могли быть разблокированы только при вводе определенного ключа продукта. Вы также можете случайным образом сгенерировать указанный ключ, хотя я бы сделал это в определенном формате, чтобы пользователь всегда мог распознать ключ продукта, когда ему его дают, и не путать его с номером счета-фактуры или чем-то еще.

Помните, что никакая система не является надежной, и кто-то на какой-то ОС каким-то образом найдет выход. Вероятно, это причина того, что я никогда не сталкивался с какими-либо стандартами, потому что ни один метод не является полностью безопасным. Вы просто должны сделать все возможное.

1
ответ дан 30 November 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: