首页 > 其他分享 >软件License设计思路与实现方案

软件License设计思路与实现方案

时间:2023-05-17 10:23:52浏览次数:31  
标签:加密 License 配置 RSA 信息 签名 软件 思路

 

文章目录

 


前言

       最近接到一个需求,需要给我们的软件系统增加一个License授权的机制,可以把软件系统部署到客户的服务器供客户试用,到期后系统就不能使用了获取产生一些限制,需要我们提供给他新的License以后才可以继续使用。
       针对这个License一般我们可能需要实现以下功能:

  1. 在License中保存一些配置信息,比如:有效期、服务器ID等等其他一些配置信息
  2. 对License进行加密处理,避免他人识别License包含的信息
  3. 对License签名校验,避免他人破解后,进行篡改

一、在License中保存配置

       最简单能想到的是用一个json格式的字符串保存所有我们需要的配置信息,如:

{
	"validTime": "2021-04-30 23:59:59",
	"machineId": "FC:AA:14:4B:66:26",
	"deviceNum": 10
}

1.有效期

       最基础的有效期配置,限制软件只能在这个时间之前使用,可以开启一个定时任务每天0点检查是否到期,到期后软件会进入一些限制逻辑,这里值得注意的就是这是时间对比最好不要用本地时间,否则他人可以修改本机系统系统,绕过该验证。这里可以使用阿里云提供的ntp服务器查询当前时间进行对比。

2.机器ID

       这个配置信息主要是防止软件服务被部署到多个机器上使用,一般可以使用MAC地址或者CPU_ID、硬盘序列号等等,只要是程序能拿到的机器唯一标示即可,具体再在软件服务启动时校验即可。

3.其他限制条件

       除了我能想到的以上两个通用限制配置,还能配置一些其他个性化的配置信息,比如限制软件只能注册10个设备,就在相应添加设备的地方判断。

二、加密配置信息

       以上那些配置信息直接作为一个json字符串文本放在项目里当然是很不安全的,很容易被人看懂修改,所以必须进行加密处理,这里可以使用常见的一些对称加密算法,如:3DES、AES等,算法公开,加解密速度快。但是由于是对称加密算法所以密钥也必须放在代码中,解密时使用,由于Java很容易反编译从而拿到密钥解密出License,所以仅仅对称加密肯定是不够的。

三、配置信息签名

       上面说到了仅仅对称加密配置信息是不够的,所以这里可以使用非对称加密算法:RSA算法,生成公私钥对,在加密配置信息之前,计算配置信息的MD5值,然后将该值使用我们的私钥加密,附在配置信息的后面作为签名,然后再将整个信息用对称密钥加密,生成最终的密文,这个密文就可以作为我们最终的License了。就算他人反编译代码拿到了对称密钥和RSA公钥,也只能看到我们的配置信息,而无法修改,因为我们附在配置信息后的签名只能用公钥解密,没有私钥无法自己篡改后加密。
       这里可能会有同学提出疑问了,为什么不直接对整个配置信息进行RSA非对称加密了,这样就不需要签名了,似乎更加简单安全,主要是因为RSA加密是有长度限制的,而且作为非对称加密,本身加解密速度相比对称加密就慢多了,RSA算法本身就不适合大量数据加解密,更适合做签名验签,我这个方案本身也是受到SSL证书 的实现所启发,HTTPS网站加解密传输数据时也是使用RSA算法验证证书,实际传输加密使用的也是对称加密算法。

总结

       以上是一个软件License的实现思路,尽管我知道以上方案肯定也有破解方式,比如:我可以反编译代码后将RSA公钥替换掉,然后使用我自己的私钥签名,就可以随意更改License中的信息了。当然我也可以把License处理逻辑单独封装成模块进行代码混淆,增加反编译修改代码难度,也可以自定义Classloader加密Jar包,也可以搭建联机校验服务器,进行在线校验等等,不管你想出多少方案,正所谓道高一尺魔高一丈,都会存在破解方案,否则像微软这么大的公司也不会让盗版windows满天飞了,更多的时候是防君子不防小人。

 

标签:加密,License,配置,RSA,信息,签名,软件,思路
From: https://www.cnblogs.com/lidabo/p/17407712.html

相关文章

  • 软件License设计
    如何保护软件版权,最常用的办法就是设计一套license验证框架。1、我们的常规需求如下:1.可以限制软件只能在一台机器上使用;目前很多软件都是一机一码的销售,软件换一台机器则不能使用,想要几台机器使用就得购买几个license;2.可以设置一个使用期限;试用版软件一般有几十天的免......
  • 人件集 人性化的软件开发阅读笔记01
    《人件集:人性化的软件开发》第一部分团队开发第一章决策,决策讲述了中庸的风险以及轻度领导研究表明,集体的决策比从集体中的个体独立做选择更具有风险倾向。如果将这种决策模式应用于软件编程,我们可能会看到这样的结果:团队可能使用更奇特的数据结构、更古怪的算法或者更......
  • 二十一条自动化测试过程中遭遇的问题及解决思路
    记录自动化中遇到的一些错误及解决思路,会持续更新(根据个人情况不同,错误解决方法不同)1、找不到元素,脚本报“NoSuchElementException:Unabletofindelement”,或者"定位到了,不能操作,点击无效"1) 首先查看自己的“属性值”是否写正确2) 元素的标签不唯一,默认找到第一个......
  • AutoMagic设计思路简介及新增自定义关键字实例
    目录  简介  AutoMagic介绍  SeleniumKey介绍  自定义关键字简介AutoMagic是一个基于WebUI的自动化管理平台。为什么叫AutoMagic呢?因为自动化在执行起来的时候是一个很神奇的事情,它可以无人值守的模拟人的操作,就像魔术(Magic)一样。所以我给她取名叫AutoMagic。Aut......
  • 软件测试人员必须了解的DevOps
    软件测试人员必须了解的DevOps前言什么是DevOps工作原则方法如何着手DevOps变更流程管理技巧挑战总结参考前言对很多软件测试人员而言,可能尚未接触到DevOps,本文的内容基于笔者日常学习,针对测试人员所记录的一些关键信息,算是给大家深入学习DevOps的一个引子。什么是DevOpsDevOps是开......
  • ThottleStop 软件的应用场景
    ThrottleStop是一个小型应用程序,旨在监视并纠正许多笔记本电脑上正在使用的三种主要类型的CPU节流。ThrottleStop的左侧包含各种选项,可用于绕过CPU节流,右侧是一个监视面板,显示您CPU上每个线程的当前状态。有些笔记本电脑使用时钟调制和乘数降低来降低计算机的性能和功耗。这......
  • 软件测试系列-全景图
    0. 软件测试全景图1. 测试定义2. 测试流派3. 测试方法4. 测试层次/类型5. 测试方式6. 测试技术7. 测试过程8.测试管理......
  • 【2023.05.16】水草缸搭建思路(阳光直射/散射)
    本文采用的是米家智能鱼缸图片环境分析鱼缸将放在院子里鞋柜上面,这个位置的话会有一个问题,那就是会有阳光直射或者散射周围没有位置可以放二氧化碳钢瓶不需要太多的打理,好养活,不需加热棒搭建思路一点点解决问题暴藻起初我的打算是放在储藏间的,家人要求放在院子里,院子里......
  • 生活琐事不怕忘,手机提醒软件帮大忙
    互联网时代的到来为时间进行的“加速”,这就导致大多数人的日常生活中总是充斥着各种各样的琐事需要记住、去完成,有时候我们也许会因为忘记某件重要的事情而受到损失。为了避免经常忘记待办或重要的事情,在手机上使用一款提醒软件是非常有必要的。一款功能强大的提醒软件可以做到在......
  • 卸载亚信的安全杀毒软件
    卸载亚信的安全杀毒软件前提:根据硬性要求装了亚信的两个杀毒软件,奈何它怎么也卸不掉。而且管理员密码也不知道,哎......