Как я могу создать ключ продукта для моего приложения C #? - PullRequest
87 голосов
/ 17 января 2009

Как мне создать ключ продукта для моего приложения C #?

Мне нужно создать ключ продукта (или лицензию), который я обновляю ежегодно. Кроме того мне нужно создать один для пробных версий.

Похожие:

Ответы [ 14 ]

1 голос
/ 17 января 2009

Хитрость заключается в том, чтобы иметь алгоритм, который известен только вам (такой, чтобы его можно было декодировать на другом конце).

Есть простые вещи, такие как «Выберите простое число и добавьте к нему магическое число»

Более сложные варианты, такие как использование асимметричного шифрования набора двоичных данных (который может включать в себя уникальный идентификатор, номера версий и т. Д.) И распространение зашифрованных данных в качестве ключа.

Также стоит прочитать ответы на на этот вопрос , а также

0 голосов
/ 14 мая 2017

Я собираюсь немного рассказать о великолепном ответе @ frankodwyer и углубиться в онлайн-лицензирование. Я являюсь основателем Keygen , лицензионного REST API, созданного для разработчиков.

Поскольку вы упомянули, что вам нужно 2 «типа» лицензий для вашего приложения, то есть «полная версия» и «пробная версия», мы можем упростить это и использовать модель лицензий с функцией , где вы используете лицензию функции вашего приложения (в данном случае есть «полный» набор функций и «пробный» набор функций).

Для начала мы могли бы создать 2 типов лицензий (называемых policy в Keygen), и всякий раз, когда пользователь регистрирует учетную запись, вы можете создать "пробную" лицензию для его запуска. out («пробная» лицензия реализует нашу политику «пробной» функции), которую вы можете использовать для различных проверок в приложении, например может ли пользователь использовать Trial-Feature-A и Trial-Feature-B .

И основываясь на этом, всякий раз, когда пользователь приобретает ваше приложение (используете ли вы PayPal, Stripe и т. Д.), Вы можете сгенерировать лицензию, реализующую «полную» политику функций, и связать ее с учетная запись пользователя . Теперь в вашем приложении вы можете проверить, есть ли у пользователя «полная» лицензия, которая может делать Pro-Feature-X и Pro-Feature-Y (делая что-то вроде user.HasLicenseFor(FEATURE_POLICY_ID) ).

Я упоминал, что разрешил вашим пользователям создавать учетных записей - что я имею в виду? Я подробно остановился на этом в паре других ответов , но кратко изложил, почему я считаю, что это превосходный способ аутентификации и идентификации ваших пользователей:

  1. Учетные записи пользователей позволяют вам связать несколько лицензий и несколько компьютеров с одним пользователем , что дает вам представление о поведении вашего клиента и подсказывает им для «покупок в приложении» , т. е. для покупки «полной» версии (вроде мобильных приложений).
  2. Мы не должны требовать от наших клиентов ввода длинных лицензионных ключей, которые утомительны для ввода и трудно отследить , т. Е. Они легко теряются. (Попробуйте поискать «потерянный лицензионный ключ» в Twitter!)
  3. Клиенты привыкли использовать электронную почту / пароль ; Я думаю, что мы должны делать то, к чему привыкли люди, чтобы обеспечить хороший пользовательский опыт (UX).

Конечно, если вы не хотите обрабатывать учетные записи пользователей и хотите ваших пользователей вводить лицензионные ключи, это совершенно нормально (и Keygen поддерживает это а также ). Я просто предлагаю другой способ обработки этого аспекта лицензирования и, надеюсь, предоставлю хороший UX для ваших клиентов.

Наконец, поскольку вы также упомянули, что хотите обновлять эти лицензии ежегодно, вы можете установить duration в своих политиках, чтобы срок действия "полных" лицензий истекал через год, а срок действия "пробных" лицензий, скажем, 2 недель, что потребует от пользователей покупки новой лицензии по истечении срока действия.

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

0 голосов
/ 26 июля 2016

Пожалуйста, проверьте этот ответ: https://stackoverflow.com/a/38598174/1275924

Идея заключается в использовании Cryptolens в качестве сервера лицензий. Вот пошаговый пример (в C # и VB.NET). Я также приложил фрагмент кода для проверки ключа ниже (в C #):

var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

Console.ReadLine();
0 голосов
/ 11 марта 2011

Вы можете проверить LicenseSpot . Это обеспечивает:

  • Компонент бесплатного лицензирования
  • Онлайн-активация
  • API для интеграции вашего приложения и интернет-магазина
  • Генерация серийного номера
  • Отзыв лицензии
  • Управление подписками
...