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" />
<PackageReference Include="RuoVea.KM" />
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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
#tool nuget:?package=RuoVea.KM&version=10.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
RuoVea.KM - 授权管理系统
📖 项目简介
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。请确保:
- 代码符合项目风格
- 保持代码风格一致
- 添加必要的注释
- 更新相关文档
📄 许可协议
本项目遵循 MIT 许可协议,详细信息请参见 LICENSE 文件。
🔗 相关资源
📧 联系方式
如有问题或建议,欢迎通过以下方式联系:
- 提交 Issue
- 发送邮件至项目维护者
RuoVea.KM - 让软件授权管理更简单!🇨🇳
| Product | Versions 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.
-
net10.0
- RuoVea.ExDto (>= 10.0.0.3)
- RuoVea.ExIdGen (>= 10.0.0.1)
- RuoVea.ExUtil (>= 10.0.0.2)
- RuoVea.SM (>= 10.0.0.4)
- System.Management (>= 10.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.