在我们做系统级框架的时候,我们要一定程度上考虑系统的使用版权,不能随便一个人拿去在任何环境都能用,所以我们需要给我们系统做一个授权认证机制,只有上传了我们下发的lic文件并验证通过,才能正常使用。

1、Smart-license简介

smart-license 是一款用于安全加固的开源项目。 主要服务于非开源产品、商业软件、具备试用功能的付费软件等,为软件提供授权制的使用方式。

1. License,通过 smart-license 生成的授权文件,导入至要授权使用的软件产品中。
2. 源数据,需要进行 License 加工处理的基础数据。例如,将软件产品运行的配置文件作为源数据,经由 smart-license 授权处理后生成 License 文件。
3. License源文件,生成 License 的同时,创建一份文件用于记录:源数据,授权时间,过期时间,秘钥对等信息。由软件授权方持有,当客户遗失 License 文件之后可以根据License源文件重新生成 License。

2、什么是 license

license 翻译为许可证。理解为协议或版权声明,违反协议的后果就是商业纠纷。用原创作品类比,我发布这篇文章时声明了原创,别人如果要转载这篇文章,要经过我允许,否则就侵犯了我的权益。当然文章的版权与软件版权还是不一样的,不做过多比较。

适用场景:

  • 非开源产品、商业软件、收费软件。
  • 限制产品的传播性,每个客户拥有专属 License。
  • 同一款软件发行包根据 License 的不同提供不同的服务能力。
  • 限定软件授权时效

产品特色

  • 开源,代码完全公开,License的生成原理是透明的。
  • 易用,提供二进制包,直接基于命令行生成 License。
  • 安全,生成的 License 在一定程度上具备防篡改能力,破解难度大。
  • 安全加固,采用非对称加密方式对 License源数据 进行预处理,防止伪造License。

3、License运行流程

4、License申请流程

5、找回License

6、使用方式

下载smart-license.tar.gz包,解压。

进入bin目录执行以下命令,例如:./license.sh 1d HelloWorld。

1d:表示授权效期1天,即一天后该License便过期。支持的效期格式包括:
h,1h:1小时; 2h:2小时
d,1d:1天; 10d:10天
y,1y:1年; 2y:2年
HelloWorld:表示待加密的license内容。
实际场景下可以通过license授权不同的产品功能和有效期,例如:./license.sh 1y features_1:on;features_2:off; 如果待授权的license内容为文件,可以采用同样的命令,例如:./license.sh 1y config.properties

执行成功后,会在当前目录下生成 License:license.txt以及 License源文件:source.txt。 注意:license.txt是提供给客户的授权文件;而source.txt是由软件提供方持有,其中包含加密私钥,需要妥善保管

7、项目集成

  • 引入Maven依赖

    <dependency><groupId>org.smartboot.license</groupId><artifactId>license-client</artifactId><version>1.0.3</version>
    </dependency>
    
  • 载入License。如若License已过期,则会触发异常。

    public class LicenseTest {public static void main(String[] args) throws Exception {File file=new File("license.txt");License license = new License();LicenseEntity licenseEntity=license.loadLicense(file);System.out.println(new String(licenseEntity.getData()));}
    }
    
  • 获取licenseEntity并以此配置启动软件。

  • 还原license

  1. 进入bin目录执行以下命令,例如:./license_revert.sh source.txt。
  2. 执行成功后会在当前目录下生成License文件license_revert.txt。

简单方便,几行代码放在启动方法里校验,也可以加注在拦截器里。

一个简单方便的授权方式,只需以上几步就可集成到boot项目中去啦

说了这么多,在演示下代码吧

生成机器码

我们首先要做的就是对软件部署的环境的唯一性进行限制,这里使用的是macadderss,当然你也可以换成cpu序列编号,并无太大影响,先上代码

private static String getMac() {try {Enumeration<NetworkInterface> el = NetworkInterface.getNetworkInterfaces();while (el.hasMoreElements()) {byte[] mac = el.nextElement().getHardwareAddress();if (mac == null)continue;String hexstr = bytesToHexString(mac);return getSplitString(hexstr, "-", 2).toUpperCase();}} catch (Exception exception) {exception.printStackTrace();}return null;} public static String getMachineCode() throws Exception{Set<String> result = new HashSet<>();String mac = getMac();result.add(mac);Properties props = System.getProperties();String javaVersion = props.getProperty("java.version");result.add(javaVersion);String javaVMVersion = props.getProperty("java.vm.version");result.add(javaVMVersion);String osVersion = props.getProperty("os.version");result.add(osVersion);String code = Encrpt.GetMD5Code(result.toString());return getSplitString(code, "-", 4);}

这里进行的操作是取出机器码,与java版本,jvm,操作系统参数进行混合,并进行MD5操作

2.进行lic文件的生成

授权证书主要包含三个要素:机器码、是否永久有效标识、证书时效。我们会将这些数据写入文本中并进行加密处理,看下生成证书的代码


public static void getLicense(String isNoTimeLimit, String licenseLimit, String machineCode, String licensePath, String priavateKeyPath) throws Exception{String[] liccontent = {"LICENSEID=yanpeng19940119@gmail.com","LICENSENAME=YBLOG使用证书",MessageFormat.format("LICENSETYPE={0}",isNoTimeLimit),MessageFormat.format("EXPIREDAY={0}",licenseLimit), //日期采用yyyy-MM-dd日期格式MessageFormat.format("MACHINECODE={0}",machineCode),""};//将lic内容进行混合签名并写入内容StringBuilder sign = new StringBuilder();for(String item:liccontent){sign.append(item+"yblog");}liccontent[5] = MessageFormat.format("LICENSESIGN={0}",Encrpt.GetMD5Code(sign.toString()));FileUtil.createFileAndWriteLines(licensePath,liccontent);//将写入的内容整体加密替换String filecontent =FileUtil.readFileToString(licensePath);String encrptfilecontent = Encrpt.EncriptWRSA_Pri(filecontent,priavateKeyPath);File file = new File(licensePath);file.delete();FileUtil.createFile(licensePath,encrptfilecontent);

最后在验证lic,我们会在系统中注册一个拦截器,未通过系统授权认证会自动跳转到lic文件上传界面,springboot接收文件与常规java有一些不同,使用的MultipartFile对象,会获取到上传文件的数组,进行操作。

我们就可以通过系统内置的公钥对lic文件的机器码,授权时间进行验证,确定是否能正常访问系统。

Springboot-软件授权License相关推荐

  1. 基于RSA+AES 软件授权License

    一.概念 License即使用许可证,只有被授权的方才可用合法使用相关产品. 一般通过一个或多个唯一标识来标识软件使用方,比如(计算机Mac地址.主板序列号和CPU序列号,或者是软件安装序列号.用户U ...

  2. 软件授权License的区别

    许多开发者和设计者希望把他们的作品作为开源项目共享,他们希望其他人能够利用和共享他们的代码. 而各种开源社区就是因为这个原因而充满活力.开源软件可以用于你能想象得到的任何应用程序,许多web设计人员使 ...

  3. 软件授权加密算法研究

    软件授权加密算法研究 转载自 brucevanfdm . 介绍 软件授权机制的基础就是加密算法.加密算法可以简单分为对称加密算法(加解密均采用同一密钥)和非对称加密算法(采用公钥加密,私钥解密或私钥签 ...

  4. 开源软件为什么要有授权(License)

    如今开源软件非常多,而且有很多功能强大.很受欢迎的开源软件,作为一名程序员,我们甚至很难想象如果没有开源软件我们怎么工作.然而开源软件的"License"却很容易被人忽略,很多人觉 ...

  5. 一种混合加密方案在软件授权中的应用

    拥有知识产权的软件一般采取软件保护手段,需要使用某种方式激活软件才可以使用.软件激活本质是对密文数据进行比较,而密文数据是由软件开发商根据目标机器的特征数据进行加密产生的.激活过程是在认证服务器或者目 ...

  6. 软件授权与加密技术简单原理

    2019-11-05 当前趋势下,互联网公司一般对外提供服务,而非直接出售软件,所以,大家不怎么关心软件授权.加密.但是,一些工业的软件拥有很核心的算法及技术专利.对外发布时,需要保护好程序.一般有如 ...

  7. S6系统激活、软件升级和软件授权激活

    2018-03-28神游技术人生之AVID音频 在开始操作之前,有必要先了解一下背景:全新S6系统自带的出厂软件版本是无法运行的!用户必须先升级软件到一个可用的版本.那这个可用的版本从哪儿来呢?答案是 ...

  8. Halcon每月授权license如何更新

    Halcon每月授权license如何更新 登录51halcon即可获取每月最新halcon license 该功能目前面向全体会员用户,同时提供了SDK方式获取. https://www.51hal ...

  9. EDA软件授权许可的监控及优化浅谈

    EDA软件是应用在电子,电气,电路,以及集成电路设计领域的计算机辅助设计软件.目前进入我国并具有广泛影响的EDA软件有:EWB.PSPICE.Matlab.SystemView.MMICAD.Powe ...

最新文章

  1. ‘百度杯’十月场web ---login
  2. 二十六、redis哨兵模式
  3. flash,flex,actionscript的关系
  4. iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解...
  5. LeetCode_Path Sum II
  6. 围观了张一鸣近10年的微博,我整理了这20多条经验之谈
  7. 软引用和弱引用的区别_强、软、弱、虚引用的区别和使用
  8. Unity根据电脑高中低配置加载不同模型
  9. 利用truffle与智能合约进行交互
  10. HALCON 20.11:标定助手使用注意事项
  11. [导入]从飞信到SNS,中国移动进军互联网之路,悬乎
  12. System.Transactions.Diagnostics.DiagnosticTrace 的类型初始值设定项引发异常。配置系统未能初始化
  13. 借助Haproxy_exporter实现对MarathonLb的流量和负载实例业务的可用状态监控
  14. 3DEC离散元数值模拟技术与应用
  15. 登录图片拖动验证联系后台
  16. 一、python:一种计算机的胶水语言
  17. VC++将位图中保存的图像灰化(附源码)
  18. 关于neo4j图数据库导出的svg文件打开方式
  19. 现在个人博客网站还能够备案吗?是否需要企业身份才能备案?
  20. Win32: 数据类型常用最大值和最小值

热门文章

  1. 宽带多天线无线传输技术发展展望
  2. 【点云系列】 场景识别类导读
  3. Docker使用总结
  4. Elasticsearch简易入门讲解
  5. 20190408每周精品之理财
  6. 第五章 Spring Boot的数据库编程
  7. WIN7无线网卡开软AP的方法
  8. Office 16 Click-to-Run Extensibility Component 卸载
  9. 论文阅读问题总结(六):Meta-Learning with Domain Adaption for Few-shot Learning Under Domain Shift
  10. Win10电脑开机之后屏幕一直闪动解决方法