历经十年/头发都快掉光/秘钥生成器终极版/机器码/到期功能限制/运行时间限制/日期防篡改/跨平台

news/2024/10/4 18:03:11 标签: Qt秘钥生成器, Qt机器码

一、项目介绍

1.0 前言说明

标题一点都不夸张,从第一版的秘钥生成器到今天这个版本,确实经历了十年的时间,最初的版本做的非常简陋,就是搞了个异或加密,控制运行时间,后面又增加设备数量的控制,然后就是到期时间的限制。这种有个巨大缺陷就是可复制性,如果将授权的秘钥文件,拷贝到其他电脑也是能正常运行的,老板急的哇哇叫,这怎么行呢,于是V2.0又增加了机器码的功能,最开始做的windows版本,后面遇到用户又需要linux和mac系统运行,不断增加了对应的唯一机器码的识别。这样就拷贝无法运行,必须一台机器对应一个秘钥,可是后面又发现写死也不行,所有又加了开关,可以开启是否启用机器码限制。

陆陆续续完善和验证了很多年,总体效果挺好,近期又有新的需求,那就是希望能够控制到期时间后限制部分功能,而不是不能运行,比如到期后视频右下角加上水印,用户还可以将过期的秘钥文件发过来,更新秘钥延长试用期限,这样就非常完美了。而且整个秘钥认证都是独立的静态函数,集成机器方便,就几行代码就行。

1.1 秘钥生成

在这里插入图片描述

  1. 由于支持多种功能限制,所以每一种功能都做了开关来开启,只有当开关开启后,对应设置的值才会起作用。
  2. 到期日期用来控制到期后限制部分功能,但是程序可以继续正常运行,也不弹窗提示。
  3. 到期时间用来控制最终可以运行程序的时间,到期后程序无法运行,会自动弹窗提示过期。
  4. 运行时间用来控制每次程序启动后,可以运行多久,单位分钟,如果设置30则表示每次程序启动后开始计时,知道运行满30分钟自动弹窗提示。
  5. 机器标识也就是机器码,支持windows、linux、mac系统,每台设备都是唯一,可以选择开启或者不开启机器标识的限制。开启后一个秘钥文件只能用到唯一的一台设备上。
  6. 最大数量用来控制软件中支持的设备的最大数量,比如控制摄像头最多添加5个,超过则弹出提示不允许继续添加。
  7. 加密数值用来生成秘钥的唯一密码,一般不同的软件可以指定不同的加密数值,这个数值用于加密解密。
  8. 到期日期和到日时间后面会显示剩余多少天字样,如果已经过期,则显示超过多少天字样。
  9. 单击本机标识按钮,自动识别本机的机器码,填入文本框中。
  10. 单击读取秘钥,自动读取当前目录下的key.lic文件,识别对应的内容并解析反馈显示到界面上。
  11. 单击写入秘钥,写入秘钥文件。然后可以将新生成的秘钥文件,复制到可执行文件对应目录,同文件替换即可。

1.2 更新秘钥

  1. 实际项目中都是以更新秘钥为主。本工具作为秘钥分发的控制端,牢牢控制在老板手里,用于控制收款进度。比如款没付完,可以设置尾款的最终日期为到期日期,之前正常运行,到了到期日期还没付完尾款,则自动限制部分功能的使用,比如视频上打上水印。程序能够继续正常运行,但是用户可以看到要交尾款了。
  2. 软件在新的设备首次运行,或者删除秘钥文件再次运行,会自动生成带有唯一机器码标识的秘钥文件,但是该文件是没有授权过的,需要发给控制端这边用来生成秘钥,相当于授权。
  3. 第一步,当用户端看到软件未授权请授权字样,将key.lic文件发给老板,老板将这个文件复制到keytool.exe文件同一目录。
  4. 第二步,双击打开keytool.exe,会自动读取目录下的key.lic文件,也可以单击读取秘钥按钮。
  5. 第三步,勾选对应要限制的功能,选择到期日期等参数,最后写入秘钥。然后将新生成的key.lic文件发给用户同文件替换即可。
  6. 这种逻辑策略有个好处就是,可以在原有的秘钥控制基础上进行更新,而不是重新生成。比如之前限制了运行时间,同时也限制了最大数量,在不知情的情况下,你并不知道用户那边的秘钥是控制了哪些功能,这样也就不好在原来的基础上更新限制。尤其是到期日期,有时候只是希望在原来的基础上,能够延长试用时间而已。

1.3 代码使用

  1. 第一步,将秘钥组件目录core_key拷贝到你的项目的上一级目录。
  2. 第二步,打开pro项目文件,加一行 include ($$PWD/…/core_key/core_key.pri) 引入组件。
  3. 第三步,代码文件引入头文件 #include “keyhelper.h” ,开始使用代码。
//指定秘钥文件路径
KeyHelper::keyFile = "./key.lic";
//读取秘钥文件/读取后会自动开启各种认证和校验
KeyHelper::readKey();

//在需要控制数量的地方调用校验数量函数
int count = ui->listWidget->count();
if (!KeyHelper::checkCount(count)) {
    return;
}

//如果需要防日期时间篡改/程序结束的时候写入最后一次的正确时间
KeyHelper::writeKey();

二、功能特点

  1. 多种开关开启不同的秘钥功能限制。
  2. 可以开启机器码限制,一机一码,一台设备对应唯一的一个机器码,自动获取机器码和秘钥文件的机器码核对。
  3. 可以开启到期功能限制,超过了指定的日期后,对运行功能增加限制,比如视频上增加水印。程序还可以继续运行,只是功能有限制。
  4. 可以开启到期时间限制,到了指定的日期后,弹出到期提醒,自动关闭程序,程序无法继续运行。
  5. 可以开启运行时间限制,比如指定程序只能运行30分钟,每次打开程序后,运行30分钟,自动关闭程序,再次打开程序,还可以继续运行30分钟。
  6. 可以开启最大数量限制,比如设置最大数量5,则该软件中可以检测添加的设备数量是否超过5个,超过则不允许继续添加。
  7. 功能限制可以选择一种或者多种,满足各种需求场景。
  8. 内置防日期时间篡改功能,自动记忆秘钥写入时间和秘钥正常运行时间,一旦检测到电脑时间被篡改,程序无法打开,自动关闭程序。运行期间也会自动检测。
  9. 支持自动检测读取秘钥文件,如果存在到期日期或者到期时间限制,自动显示剩余天数。
  10. 多重加密算法,无法解密和破解。控制端可设定私有的加解密秘钥。
  11. 离线使用,无需联网,方便在各种离线设备使用。
  12. 同时支持windows、linux、mac系统,支持所有Qt版本。

三、相关链接

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_key.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun

http://www.niftyadmin.cn/n/5690220.html

相关文章

STM32 OLED

文章目录 前言一、OLED是什么?二、使用步骤1.复制 OLED.C .H文件1.1 遇到问题 2.统一风格3.主函数引用头文件3.1 oled.h 提供了什么函数 4.介绍显示一个字符的函数5. 显示十进制函数的讲解 三、使用注意事项3.1 配置符合自己的引脚3.2 花屏总结 前言 提示&#xff…

ElasticSearch备考 -- Search scroll

一、题目 Search for all documents in all indices As above, but use the scroll API to return the first 100 results while keeping the search context alive for 2 minutes Use the scroll id included in the response to the previous query and retrieve the next ba…

Linux 系统 nvm 管理node无法使用

文章目录 一、报错说明二、报错原因三、解决办法四、验证 一、报错说明 centos7服务器使用nvm安装的node之后,只要使用npm或者node,均会出现以下问题。 npm -v node: /lib64/libm.so.6: version GLIBC_2.27 not found (required by node) node: /lib64…

基于SpringBoot+Vue的摄影社团管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Raspberry Pi3B+之C/C++开发环境搭建

Raspberry Pi3B之C/C开发环境搭建 1. 源由2. 环境搭建2.1 搭建C语言开发环境2.2 工程目录结构2.3 Makefile2.4 Demo (main.c) 3. 测试工程3.1 编译3.2 运行 4. 总结5. 参考资料 1. 源由 为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》,以及VINS-Fusion对于图…

Redis篇(Redis原理 - 网络模型)

目录 一、用户空间和内核态空间 二、阻塞IO 三、非阻塞IO 四、IO多路复用 五、IO多路复用-select方式 六、IO多路复用模型-poll模式 七、IO多路复用模型-epoll函数 八、网络模型-epoll中的ET和LT 九、网络模型-基于epoll的服务器端流程 十、网络模型-信号驱动 异步IO…

C++拾趣——绘制Console中多个进度条

大纲 多/单线程移动光标方案代码 在《C拾趣——绘制Console中单个进度条》一文中,我们介绍了使用\r来将光标重置到一行的开头,从而实现重绘的功能。 但是如果我们同时有几个同步运行的进度条,该如何实现呢? 这儿要解决几个问题&a…

HTTPS协议简单介绍

HTTP协议简单介绍HTTP协议简单介绍-CSDN博客 目录 一、对称加密和非对称加密 对称加密 非对称加密 总结 二、HTTPS协议 定义 关键特点 工作原理 详细通信过程 1. 客户端请求连接 2. 服务器响应 3. 密钥交换 4. 加密通信 5. 关闭连接 ​编辑 优势 缺点 1. 性能…