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許可提供。