miqo.license为您提供所有必要工具,可以发出许可的真实性。许可证文件是使用最先进的椭圆曲线数字签名算法(ECDA)进行数字签名的,以确保创建后不能篡改许可证。
该库可用于.NET Standard 2.0和.NET Framework 4.0及更高版本。测试项目使用.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.LICENS不会在验证失败时不会引发任何例外,而是返回验证失败的列举。
只需检查是否有任何故障:
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的灵感来自于便携式。(由丹尼尔·纳克(Daniel Nauck),纳克(Nauck))使用,并使用了一些验证代码。
其他两个库也用于ECDSA部分。
MIQO.LICENSE可根据MIT许可提供。