Miqo.license предоставляет вам все необходимые инструменты для выпуска, подписи и проверки подлинности лицензии. Файлы лицензий в цифровом виде подписаны с использованием современной эллиптической кривой цифровой алгоритма подписи (ECDSA), чтобы гарантировать, что лицензии не могут быть подделаны после создания.
Библиотека доступна для .net Standard 2.0 и .net Framework 4.0 и выше. Проект Tests использует .net Core 2.0. Как библиотека, так и пакет Nuget подписаны.
Библиотека miqo.license позволяет легко:

Библиотека доступна в виде подписанного пакета Nuget.
PM> Install-Package Miqo.License
Перед подписанием файла лицензии вам понадобится частный и открытый ключ. Miqo.license использует алгоритм цифровой подписи эллиптической кривой (ECDSA), чтобы гарантировать, что файлы лицензий не могут быть подделаны после создания. Частный ключ используется для подписи файла лицензии, а открытый ключ используется для проверки подлинности лицензии.
Вы можете использовать инструмент создания клавиш в комплекте или создать новую пару, используя Signer() как это:
var signer = new Miqo . License . ECC . Signer ( ) ;
var privateKey = signer . PrivateKey ;
var publicKey = signer . PublicKey ; Используйте Signer(privateKeyString) , чтобы предоставить ранее сгенерированный личный ключ.
Частный ключ должен храниться надежно и должен быть уникальным для каждого из ваших продуктов. Общедоступный ключ распространяется с вашим программным обеспечением. Если вы хотите, чтобы ваш клиент купил новую лицензию в каждом крупном выпуске, вы можете создать пару ключей для каждого выпуска и продукта.
После создания паров ключей для вашего продукта вы готовы создать новую лицензию. Самый простой способ сделать это - использовать класс Fluentlicense.
var license = FluentLicense . CreateLicense ( )
. WithUniqueIdentifier ( Guid . NewGuid ( ) )
. As ( LicenseType . Standard )
. ExpiresAt ( DateTime . Today . AddYears ( 1 ) )
. ForProduct ( "Chewing Gum" )
. LicensedTo ( new Customer {
Name = @"Angus 'Mac' MacGyver" ,
Email = "[email protected]" ,
Company = "Phoenix Foundation"
} )
. SignLicenseWithPrivateKey ( privateKey ) ;Лицензия теперь подписана, и вы готовы сохранить ее в качестве файла JSON:
license . Save ( "ChewingGum.License" ) ;Если вы хотите сохранить файл лицензии в базе данных или другой моде, вы можете использовать:
var jsonString = license . ToJsonString ( ) ;Загрузите лицензию из файла:
var license = License . Load ( "ChewingGum.License" ) ;Вы также можете загрузить лицензию из строки:
var license = License . LoadFromString ( jsonString ) ;Теперь вы можете начать проверять лицензию:
using Miqo . License . Validation ;
var validationFailures = license . Validate ( )
. ProductName ( "Chewing Gum" )
. And ( )
. ExpirationDate ( )
. And ( )
. Signature ( publicKey )
. AssertValidLicense ( ) ;Miqo.license не будет бросить никаких исключений, когда проверка не удастся, а скорее вернет перечисление сбоев проверки.
Просто проверьте, есть ли какой -либо сбой:
if ( validationFailures . Any ( ) ) {
.. .Или, если вы хотите итерации по поводу каждого использования сбоя:
foreach ( var failure in validationFailures ) {
Console . WriteLine ( $ " { failure . GetType ( ) . Name } : { failure . Message } - { failure . HowToResolve } " ) ;
} Использовать validationFailures.ToList(); Прежде чем пытаться использовать результат несколько раз.
byte[] и шестнадцатеричной string Обратите внимание, что miqo.license использует byte[] для частных и общественных ключей. Вы можете использовать класс расширения HexExtensions для быстрого преобразования между byte[] и шестигранной string .
byte [ ] publicKey = ECC . HexExtensions . ToHex ( publicKeyHexString ) ;
string hex = ECC . HexExtensions . HexToBytes ( publicKey ) Файл лицензии сохраняется в стандартном формате JSON.
{
"license" : {
"id" : " 39bca166-e7ad-471a-955c-873673a9115d " ,
"createdAt" : " 2018-07-24T19:36:57.1917491Z " ,
"product" : " Chewing Gum " ,
"licenseType" : " Standard " ,
"customer" : {
"name" : " Angus 'Mac' MacGyver " ,
"company" : " Phoenix Foundation " ,
"email" : " [email protected] "
},
"expiresAt" : " 2019-07-24T00:00:00+02:00 "
},
"signature" : " ee9wYUeADZUlP7+Q+3PdrtBXqb4ricPlebTBbkMmYEdsPt/D3f6vVwlKQ4jrN1pGECaCTmljMOWWfDUNknLGdA== "
}Вы можете использовать инструмент создания клавиш в комплекте для быстрого генерации новой пары ключей в шестнадцатеричном формате.

Miqo.license был вдохновлен Portable.licensing (Даниэль Наук, Наук это) и использует некоторые из кода проверки.
Две другие библиотеки также используются для части ECDSA.
Miqo.license предоставляется по лицензии MIT.