RuoVea.KM 10.0.0

dotnet add package RuoVea.KM --version 10.0.0
                    
NuGet\Install-Package RuoVea.KM -Version 10.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RuoVea.KM" Version="10.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RuoVea.KM" Version="10.0.0" />
                    
Directory.Packages.props
<PackageReference Include="RuoVea.KM" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add RuoVea.KM --version 10.0.0
                    
#r "nuget: RuoVea.KM, 10.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package RuoVea.KM@10.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=RuoVea.KM&version=10.0.0
                    
Install as a Cake Addin
#tool nuget:?package=RuoVea.KM&version=10.0.0
                    
Install as a Cake Tool

RuoVea.KM - 授权管理系统

NuGet License

📖 项目简介

RuoVea.KM 是一个完整的授权管理系统,基于国密算法(SM2/SM3/SM4)实现,提供授权码生成、验证、激活等功能,以及机器硬件指纹识别能力。

该库提供了简单易用的 API 接口,支持 .NET 5/6/7/8/9/10,适用于各种软件授权管理场景。

✨ 功能特性

  • 🔒 授权管理系统:授权码生成、验证、激活、机器绑定
  • 🖥️ 机器指纹识别:基于CPU、硬盘、MAC地址和主板序列号的硬件指纹生成
  • 🔐 国密算法支持:基于SM2/SM3/SM4算法实现授权加密和签名
  • 📦 多目标框架支持:.NET 5.0 / 6.0 / 7.0 / 8.0 / 9.0 / 10.0
  • 📱 跨平台支持:支持Windows和Linux系统
  • 💾 授权存储:本地文件存储和备份机制
  • 📊 授权状态管理:有效期检查、过期预警

📦 安装

NuGet 包管理器

Install-Package RuoVea.KM

.NET CLI

dotnet add package RuoVea.KM

PackageReference

<PackageReference Include="RuoVea.KM" Version="6.10.0" />

🚀 快速开始

授权管理系统使用示例

using RuoVea.KM;

// ========== 生成授权码 ==========
// 1. 生成SM2密钥对
var (publicKey, privateKey) = LicenseManager.GenerateSm2KeyPair();

// 2. 创建授权信息
var licenseInfo = new LicenseInfo
{
    LicenseId = "LIC-" + Guid.NewGuid().ToString().ToUpper().Substring(0, 8),
    CustomerName = "测试客户",
    BoundMachineFingerprint = MachineFingerprint.GetMachineFingerprint(),
    EffectiveTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
    ExpiryTime = DateTimeOffset.UtcNow.AddYears(1).ToUnixTimeSeconds(),
    Features = "ALL",
    LicenseType = 2, // 订阅类型
    IssuedAt = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
    ActivationExpiryTime = DateTimeOffset.UtcNow.AddDays(30).ToUnixTimeSeconds(),
    Remark = "测试授权"
};

// 3. 生成授权码
string licenseCode = LicenseManager.GenerateLicense(licenseInfo, privateKey);
Console.WriteLine($"生成的授权码: {licenseCode}");

// ========== 验证授权码 ==========
// 验证授权码
var validateResult = LicenseManager.ValidateLicense(licenseCode, publicKey);
if (validateResult.Code == RuoVea.ExEnum.CodeStatus.OK)
{
    Console.WriteLine("授权码验证成功!");
    Console.WriteLine($"客户名称: {validateResult.Data.CustomerName}");
    Console.WriteLine($"有效期至: {validateResult.Data.GetExpiryDisplay()}");
}
else
{
    Console.WriteLine($"授权码验证失败: {validateResult.Message}");
}

// ========== 激活授权 ==========
// 激活授权
var activateResult = LicenseManager.ActivateLicense(licenseCode, publicKey);
if (activateResult.Code == RuoVea.ExEnum.CodeStatus.OK)
{
    Console.WriteLine($"激活成功!{activateResult.Message}");
}
else
{
    Console.WriteLine($"激活失败: {activateResult.Message}");
}

// ========== 加载并验证存储的授权 ==========
// 加载并验证存储的授权
var loadResult = LicenseManager.LoadAndValidateStoredLicense(publicKey);
if (loadResult.Code == RuoVea.ExEnum.CodeStatus.OK)
{
    Console.WriteLine("加载授权成功!");
    Console.WriteLine($"客户名称: {loadResult.Data.CustomerName}");
    Console.WriteLine($"有效期至: {loadResult.Data.GetExpiryDisplay()}");
}
else
{
    Console.WriteLine($"加载授权失败: {loadResult.Message}");
}

// ========== 检查授权是否即将过期 ==========
// 检查授权是否即将过期(7天内)
var (isExpiringSoon, daysRemaining) = LicenseManager.CheckExpiringSoon(7, publicKey);
if (isExpiringSoon)
{
    Console.WriteLine($"授权将在 {daysRemaining} 天后过期,请及时更新!");
}
else
{
    Console.WriteLine("授权有效期充足。");
}

// ========== 生成默认授权 ==========
// 生成默认的2年试用授权
var defaultLicense = LicenseManager.GenerateDefaultLicense();
string encryptedDefaultLicense = LicenseManager.EncryptDefaultLicense(defaultLicense);
Console.WriteLine($"生成的默认授权: {encryptedDefaultLicense}");

// 解密默认授权
var decryptedDefaultLicense = LicenseManager.DecryptDefaultLicense(encryptedDefaultLicense);
Console.WriteLine($"解密后的默认授权客户: {decryptedDefaultLicense.CustomerName}");

// 验证默认授权
var defaultValidateResult = LicenseManager.ValidateDefaultLicense(decryptedDefaultLicense);
if (defaultValidateResult.Code == RuoVea.ExEnum.CodeStatus.OK)
{
    Console.WriteLine("默认授权验证成功!");
}
else
{
    Console.WriteLine($"默认授权验证失败: {defaultValidateResult.Message}");
}

机器指纹使用示例

using RuoVea.KM;

// 获取当前机器的硬件指纹
string machineFingerprint = MachineFingerprint.GetMachineFingerprint();
Console.WriteLine($"当前机器指纹: {machineFingerprint}");

// 验证机器指纹是否匹配
bool isMatch = MachineFingerprint.IsMatch(machineFingerprint);
Console.WriteLine($"指纹匹配结果: {isMatch}");

🏗️ 项目结构

RuoVea.KM/
├── RuoVea.KM/               # 核心库目录
│   ├── LicenseInfo.cs       # 授权信息实体类
│   ├── LicenseManager.cs    # 授权管理通用类
│   ├── MachineFingerprint.cs # 机器硬件指纹生成器
│   ├── README.md            # 库说明文档
│   └── *.csproj             # 多目标框架项目文件
├── RuoVea.KM.Demo/          # 示例项目目录
│   ├── Program.cs           # 主程序示例
│   ├── RuoVea.KM.Demo.csproj # 示例项目文件
│   └── TestSM2SignVerify.cs # SM2签名验证测试
├── .gitignore              # Git忽略文件
├── LICENSE                 # 许可协议
├── README.md               # 项目说明文档
├── RuoVea.KM.sln           # 解决方案文件
└── dotnet build.bat        # 构建脚本

📚 核心类说明

LicenseInfo 类

授权信息实体类,包含授权的详细信息:

  • LicenseId:授权码唯一标识
  • CustomerName:被授权方名称/客户标识
  • BoundMachineFingerprint:绑定的客户端硬件指纹
  • EffectiveTime:授权生效时间(UTC时间戳)
  • ExpiryTime:授权失效时间(UTC时间戳)
  • Features:授权模块/功能列表(逗号分隔)
  • LicenseType:授权类型(1:永久;2:订阅;3:试用)
  • IssuedAt:生成时间戳
  • ActivationExpiryTime:激活截止时间(UTC时间戳)
  • Remark:备注信息

LicenseManager 类

授权管理通用类,提供授权相关的核心功能:

  • GenerateSm2KeyPair:生成SM2密钥对
  • GenerateLicense:生成授权码
  • ValidateLicense:验证授权码
  • ActivateLicense:激活授权
  • LoadAndValidateStoredLicense:加载并验证本地存储的授权码
  • GenerateDefaultLicense:生成默认的2年试用授权
  • EncryptDefaultLicense:加密默认授权信息
  • DecryptDefaultLicense:解密默认授权信息
  • ValidateDefaultLicense:验证默认授权
  • CheckExpiringSoon:检查授权是否即将过期

MachineFingerprint 类

机器硬件指纹生成器,用于获取和验证机器硬件指纹:

  • GetMachineFingerprint:获取当前机器的硬件指纹(基于CPU、硬盘、MAC地址和主板序列号)
  • IsMatch:验证当前机器是否匹配指定的指纹

🔧 支持的框架

框架版本 支持状态 包版本
.NET 10.0 ✅ 支持 6.10.0
.NET 9.0 ✅ 支持 9.0.0.x
.NET 8.0 ✅ 支持 8.0.0.x
.NET 7.0 ✅ 支持 7.0.0.x
.NET 6.0 ✅ 支持 6.0.1.x
.NET 5.0 ✅ 支持 5.0.0.x

📝 依赖项

  • RuoVea.ExDto:数据传输对象
  • RuoVea.ExEnum:枚举定义
  • Portable.BouncyCastle:密码学库
  • System.Management:WMI操作(Windows系统)

🔒 安全特性

  • SM2非对称加密:用于授权码签名和验证
  • SM3哈希算法:用于数据完整性校验
  • SM4对称加密:用于授权信息加密
  • 机器绑定:授权与特定机器硬件绑定,防止授权滥用
  • 授权存储:授权信息本地加密存储,并在AppData目录备份

🎯 应用场景

  • 商业软件授权:为商业软件提供授权管理功能
  • SaaS服务激活:用于SaaS服务的激活和管理
  • 企业内部软件:企业内部软件的使用权限管理
  • 试用版管理:提供试用授权,到期后需要购买正式授权

🤝 贡献指南

欢迎提交 Pull Request 和 Issue。请确保:

  1. 代码符合项目风格
  2. 保持代码风格一致
  3. 添加必要的注释
  4. 更新相关文档

📄 许可协议

本项目遵循 MIT 许可协议,详细信息请参见 LICENSE 文件。

🔗 相关资源

📧 联系方式

如有问题或建议,欢迎通过以下方式联系:

  • 提交 Issue
  • 发送邮件至项目维护者

RuoVea.KM - 让软件授权管理更简单!🇨🇳

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.0 124 4/13/2026
9.0.0 122 4/13/2026
8.0.0 112 4/13/2026
7.0.0 115 4/13/2026
6.0.0 110 4/13/2026