.NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

简介:

  在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Software Protector序列号生成组件。今天就通过一篇简单的文章来预览一下其强大的功能。虽然我人为其已经基本满足了一个软件序列号的所有要素,但至于大家用不用得上,还得看大家的需求。总的来说,其源码并不复杂的,即使要增加功能,也可以使用其进行扩展。何苦,就我而言,虽然以前也做过简单的序列号注册和验证,但看完这个之后,自己真的是太天真了。以前也简直是弱爆了,所以某种意义上,这个组件的功能是很强大的。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

本文原文地址:.NET平台开源项目速览(9)SoftwareProtector软件序列号生成组件介绍与使用

1.基本功能介绍

  说简单的,这个东西就是序列号生成器,用来保护应用程序的授权的。可以生成和验证不同类型的序列号(20位),能限制时间(最多999天),还能够锁定特定机器的key。这个组件是GUI界面,内核使用的是SKGL(Serial Key Generating Library)组件。所以使用的时候还是一起吧,地址如下:

官方网站:http://softwareprotector.codeplex.com/

                 http://skgl.codeplex.com/

看看界面所演示的功能截图:

        

 如果选择了锁定机器,就只能在指定机器码上的电脑用了,下面是验证序列号的截图:

    下面来简单看看核心的SKGL源代码以及使用情况。

2.核心的SKGL源码分析

     对SKGL源码的分析,由于总共代码量很少,实际的代码量只有260行,所以我对这个源代码进行了简单的翻译,特别是主要核心方法的功能,便于理解。后面我们将提供制作好的CHM帮助文档,供使用参考。SKGL中总共有5个类,其中比较核心的只有3个类,另外2个是抽象基类以及内部核心方法。所以主要看看3个核心类:

2.1 SerialKeyConfiguration类

    SerialKeyConfiguration序列号配置类,继承自BaseConfiguration抽象配置基类。其主要作用是存储机器码,以及生成序列号说需要的一些特征字段。目前配置里面默认有8个特征配置项,通过选择不同的配置特征项,可以更加灵活生成序列号加密方案。SerialKeyConfiguration作为核心类,在序列号的生成和验证中都有用到。

2.2 Generate类

    Generate类也是继承BaseConfiguration的类,作用是根据配置类生成说需要的序列号。里面有密钥的设置,以及生成序列号的核心函数doKey,里面的逻辑也不是很复杂,主要是根据需要生成的类型,如时间限制,是否有机器码来进行判断,然后调用内部方法来生成序列号。

2.3 Validate类

    Validate类也是继承BaseConfiguration类,因为验证是一个解密的逆向过程,也需要用到配置相关的项。类的主要作用是验证序列号是否合法,是否过期等功能,也是要调用核心的内部类进行解密。总体来说思路是很简单的,关于具体的实现过程,暂时没必要深究,可以查看源代码进行详细的理解。 

3.SKGL核心功能调用

     这个组件一个是核心类,1个是非常成熟可以直接使用的UI界面,UI界面的代码是VB.NET,很简单。这里我将演示几种使用方法,来调用核心的SKGL组件来完成序列号的生成和解密功能。使用之前添加引用,新建项目这些东西就不必说了。直接进入主题吧。

1.创建Key

    创建key使用Generate类,主要有3个重载方法,下面的例子很简单的进行了演示,看代码注释即可理解。

1
2
3
4
5
6
7
8
9
10
//1.创建key生成对象
var  CreateAKey =  new  Generate();
//2.设置密钥
CreateAKey.secretPhase =  "testdemo" ;
//3.生成key,30天时间限制
var  key1 = CreateAKey.doKey(30);
//4.还可以设置机器码以及设置起始日期,机器码是1个5位Int数
var  key2 = CreateAKey.doKey(30, 61125);
Console.WriteLine( "Key 1 :" +key1);
Console.WriteLine( "Key 2 :" +key2);

    结果如下,第2个key使用了本机的机器码,我们在下面的代码中将进行验证:

1
2
Key 1 :MFZIL-NSTBB-DLLXZ-RFHYV
Key 2 :JPVFS-BLQOQ-FLFTN-HXLFW

2.验证Key

    验证key是一个逆向过程,使用Validate类,我们使用上面代码生成的key和配置来进行验证。代码如下,具体看注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1.创建key验证对象
var  ValidateAKey =  new  Validate();
//2.设置密钥
ValidateAKey.secretPhase =  "testdemo" ;
//3.设置要验证的key,注意,这是上面代码生成的key1内容
ValidateAKey.Key =  "MFZIL-NSTBB-DLLXZ-RFHYV" ;           
//4.直接验证是否被修改
Console.WriteLine( "Key 1 验证:{0}"  , ValidateAKey.IsValid);
//5.检查key是否过期,false说明在有效期内
Console.WriteLine( "Key 1 有效期:{0}" , ValidateAKey.IsExpired);
//同样验证Key2
ValidateAKey.Key =  "JPVFS-BLQOQ-FLFTN-HXLFW" ;
//检查密钥是否被修改
Console.WriteLine( "Key 2 验证:{0}" , ValidateAKey.IsValid);
//我电脑的实际机器码是 61125,所以结果是不一样的
Console.WriteLine( "Key 2 是否和当前机器的机器码一样:{0}" , ValidateAKey.IsOnRightMachine);

结果如下:

1
2
3
4
Key 1 验证:True
Key 1 有效期:False
Key 2 验证:True
Key 2 是否和当前机器的机器码一样:False

    如上图可以验证密钥是否修改,以及是否过期,以及对应的机器码是否和本机一样。在实际使用中,如果要锁定机器,必须先获得机器码,然后生成对应的才行。

3.高级应用之特征值

    在源代码以及上面的解说中,我们提到了,在SKGL中,有一个特征码属性:Features,是1个长度为8的布尔数组。它有什么作用呢?

    简单的说,设置这个属性,可以让你定义密钥的使用在不同的环境或者版本中。例如应用程序发布后,可能会有试用版,个人版,专业版等等不同版本。实际使用的时候就可以拿出其中的位来设置是否是某一个版本,或者某一个功能类型。SKGL在实际的验证中,也会对这些特征进行验证,从而根据序列号的类型来使用对应的功能。下面我们使用1个简单的例子,演示如何使用这个特征码属性。这个属性需要在生成或者验证的配置对象中进行设置:

3.1 配置生成对应版本的Key

    比如8个特征码,选择其中1个设置是否为时间限制的试用版。如下面代码和注释:

1
2
3
4
5
6
7
8
9
//配置对象
SerialKeyConfiguration skc =  new  SerialKeyConfiguration(); 
//生成key对象
Generate CreateAKey =  new  Generate(skc);
//
string  trialKey = CreateAKey.doKey(30);  //试用版30天期限
//创建1个有时间限制的试用版
skc.Features =  new  bool [8] {  true false false false , false false , false  , false  };
// 当然这里的版本可以自定义,只要你自己认识就行了

    这里设置的位置的意义,在自己的程序中你认识就行了。

3.2 解密获取Key的特征功能

    下面是对应的一个解密后验证功能的代码例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//配置对象
SerialKeyConfiguration skc =  new  SerialKeyConfiguration();
//验证对象
Validate ValidateAKey =  new  Validate(skc);
ValidateAKey.Key = textBox4.Text;  // 对比输入的序列号
{
     if  (ValidateAKey.IsValid) //如果没有被修改
     {    //验证特征码是否符合某些版本的特征
         if  (ValidateAKey.Features[0] ==  false )
         {
             //TODO:
         }
         if  (ValidateAKey.Features[0] ==  true )
         {
             //TODO:
         }
         //TODO:
      }
     else
     {
         //TODO:
     }
}

    总的来说,这个组件基本功能都满足了,非常值得一用。至于思路,大家可以做成网站验证或者生成注册码的。自己写一个其实也挺费劲的,在一般的软件中是足够了。

5.资源

    源码不复杂,在学习过程中,就顺便把它给翻译了。所以这里奉献我翻译后的源代码以及Demo,以及制作的帮助文档。上个图:

翻译后的源码与Demo,托管在Github,我不会告诉你网址在这里的:https://github.com/asxinyu/SKGL


本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html,如需转载请自行联系原作者


相关文章
|
17天前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
1月前
|
数据采集 传感器 监控
.NET 工控网关 轻量级组态软件
【10月更文挑战第10天】.NET 工控网关是一种基于 .NET 平台开发的设备,用于连接工业控制系统中的不同网络和设备,实现数据传输和协议转换。它能统一处理多种协议(如 Modbus、Profibus)的数据,便于后续系统处理。.NET 平台的优势包括开发效率高、跨平台能力强及安全性高,适用于工业物联网环境。此外,轻量级组态软件具备体积小、资源占用少的特点,可在资源受限的设备上运行,提供数据采集、监控、报警及数据分析等功能,简化工业自动化过程。
|
29天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
3月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
71 0
|
4月前
|
存储 开发框架 前端开发
基于Lumisoft.NET组件,使用IMAP协议收取邮件
基于Lumisoft.NET组件,使用IMAP协议收取邮件
|
4月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
5月前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
101 1
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
43 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
63 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
49 0
下一篇
无影云桌面