标题一点都不夸张,从第一版的秘钥生成器到今天这个版本,确实经历了十年的时间,最初的版本做的非常简陋,就是搞了个异或加密,控制运行时间,后面又增加设备数量的控制,然后就是到期时间的限制。这种有个巨大缺陷就是可复制性,如果将授权的秘钥文件,拷贝到其他电脑也是能正常运行的,老板急的哇哇叫,这怎么行呢,于是V2.0又增加了机器码的功能,最开始做的windows版本,后面遇到用户又需要linux和mac系统运行,不断增加了对应的唯一机器码的识别。这样就拷贝无法运行,必须一台机器对应一个秘钥,可是后面又发现写死也不行,所有又加了开关,可以开启是否启用机器码限制。
陆陆续续完善和验证了很多年,总体效果挺好,近期又有新的需求,那就是希望能够控制到期时间后限制部分功能,而不是不能运行,比如到期后视频右下角加上水印,用户还可以将过期的秘钥文件发过来,更新秘钥延长试用期限,这样就非常完美了。而且整个秘钥认证都是独立的静态函数,集成机器方便,就几行代码就行。
1.1 秘钥生成由于支持多种功能限制,所以每一种功能都做了开关来开启,只有当开关开启后,对应设置的值才会起作用。到期日期用来控制到期后限制部分功能,但是程序可以继续正常运行,也不弹窗提示。到期时间用来控制最终可以运行程序的时间,到期后程序无法运行,会自动弹窗提示过期。运行时间用来控制每次程序启动后,可以运行多久,单位分钟,如果设置30则表示每次程序启动后开始计时,知道运行满30分钟自动弹窗提示。机器标识也就是机器码,支持windows、linux、mac系统,每台设备都是唯一,可以选择开启或者不开启机器标识的限制。开启后一个秘钥文件只能用到唯一的一台设备上。最大数量用来控制软件中支持的设备的最大数量,比如控制摄像头最多添加5个,超过则弹出提示不允许继续添加。加密数值用来生成秘钥的唯一密码,一般不同的软件可以指定不同的加密数值,这个数值用于加密解密。到期日期和到日时间后面会显示剩余多少天字样,如果已经过期,则显示超过多少天字样。单击本机标识按钮,自动识别本机的机器码,填入文本框中。单击读取秘钥,自动读取当前目录下的key.lic文件,识别对应的内容并解析反馈显示到界面上。单击写入秘钥,写入秘钥文件。然后可以将新生成的秘钥文件,复制到可执行文件对应目录,同文件替换即可。1.2 更新秘钥实际项目中都是以更新秘钥为主。本工具作为秘钥分发的控制端,牢牢控制在老板手里,用于控制收款进度。比如款没付完,可以设置尾款的最终日期为到期日期,之前正常运行,到了到期日期还没付完尾款,则自动限制部分功能的使用,比如视频上打上水印。程序能够继续正常运行,但是用户可以看到要交尾款了。软件在新的设备首次运行,或者删除秘钥文件再次运行,会自动生成带有唯一机器码标识的秘钥文件,但是该文件是没有授权过的,需要发给控制端这边用来生成秘钥,相当于授权。第一步,当用户端看到软件未授权请授权字样,将key.lic文件发给老板,老板将这个文件复制到keytool.exe文件同一目录。第二步,双击打开keytool.exe,会自动读取目录下的key.lic文件,也可以单击读取秘钥按钮。第三步,勾选对应要限制的功能,选择到期日期等参数,最后写入秘钥。然后将新生成的key.lic文件发给用户同文件替换即可。这种逻辑策略有个好处就是,可以在原有的秘钥控制基础上进行更新,而不是重新生成。比如之前限制了运行时间,同时也限制了最大数量,在不知情的情况下,你并不知道用户那边的秘钥是控制了哪些功能,这样也就不好在原来的基础上更新限制。尤其是到期日期,有时候只是希望在原来的基础上,能够延长试用时间而已。1.3 代码使用第一步,将秘钥组件目录core_key拷贝到你的项目的上一级目录。第二步,打开pro项目文件,加一行 include ($$PWD/../core_key/core_key.pri) 引入组件。第三步,代码文件引入头文件 #include "keyhelper.h" ,开始使用代码。 //指定秘钥文件路径KeyHelper::keyFile = "./key.lic";//读取秘钥文件/读取后会自动开启各种认证和校验KeyHelper::readKey();//在需要控制数量的地方调用校验数量函数int count = ui->listWidget->count();if (!KeyHelper::checkCount(count)) { return;}//如果需要防日期时间篡改/程序结束的时候写入最后一次的正确时间KeyHelper::writeKey();二、功能特点多种开关开启不同的秘钥功能限制。可以开启机器码限制,一机一码,一台设备对应唯一的一个机器码,自动获取机器码和秘钥文件的机器码核对。可以开启到期功能限制,超过了指定的日期后,对运行功能增加限制,比如视频上增加水印。程序还可以继续运行,只是功能有限制。可以开启到期时间限制,到了指定的日期后,弹出到期提醒,自动关闭程序,程序无法继续运行。可以开启运行时间限制,比如指定程序只能运行30分钟,每次打开程序后,运行30分钟,自动关闭程序,再次打开程序,还可以继续运行30分钟。可以开启最大数量限制,比如设置最大数量5,则该软件中可以检测添加的设备数量是否超过5个,超过则不允许继续添加。功能限制可以选择一种或者多种,满足各种需求场景。内置防日期时间篡改功能,自动记忆秘钥写入时间和秘钥正常运行时间,一旦检测到电脑时间被篡改,程序无法打开,自动关闭程序。运行期间也会自动检测。支持自动检测读取秘钥文件,如果存在到期日期或者到期时间限制,自动显示剩余天数。多重加密算法,无法解密和破解。控制端可设定私有的加解密秘钥。离线使用,无需联网,方便在各种离线设备使用。同时支持windows、linux、mac系统,支持所有Qt版本。三、相关链接体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_key.zip国内站点:https://gitee.com/feiyangqingyun国际站点:https://github.com/feiyangqingyun