license生成工具

根据 mac地址,生产验证码已经license文件
package com.datacvg.util;import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.DES;
import com.google.gson.Gson;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;/*** 产品license生成工具*/
public class LicenseUtil {private String ip;//生成licensepublic String createLicense(){return RandomStringUtils.randomAlphanumeric(4).toUpperCase() + "-" +RandomStringUtils.randomAlphanumeric(4).toUpperCase() + "-" +RandomStringUtils.randomAlphanumeric(4).toUpperCase() + "-" +RandomStringUtils.randomAlphanumeric(4).toUpperCase();}//生成license文件public void createLicenseFile(String mac, Integer effectDays, File file, String key, String licenseStr) throws IOException {//生成license文件包含mac、生成license时间、license有效时间、鉴权结果,内容通过des加密、aes加密License license = new License();license.setMac(mac);license.setAuth(false);license.setCreateTime(new Date());license.setEffectDays(effectDays);license.setLicenseStr(licenseStr);String licenseJson = new Gson().toJson(license);FileUtils.writeStringToFile(file, AESEncrypt(DESEncrypt(licenseJson,key),key));}//激活licensepublic Boolean actLicense(String userLicenseStr, File file, String key) throws IOException {//获取加密的license值String encryptLicenseJson = FileUtils.readFileToString(file);//解密license映射实体License license = new Gson().fromJson(DESDecrypt(AESDecrypt(encryptLicenseJson,key),key), License.class);//对比用户填写的license是否正确if(StringUtils.equals(license.getLicenseStr(),userLicenseStr)){//激活license文件license.setAuth(true);String licenseJson = new Gson().toJson(license);FileUtils.writeStringToFile(file, AESEncrypt(DESEncrypt(licenseJson,key),key));return true;}return false;}//校验licensepublic Boolean authLicense(File file, String key) throws IOException {//获取加密的license值String encryptLicenseJson = FileUtils.readFileToString(file);//解密license映射实体License license = new Gson().fromJson(DESDecrypt(AESDecrypt(encryptLicenseJson,key),key), License.class);if(license.getAuth()){if (!getMacList().contains(license.getMac().toUpperCase())){return false;}//已激活判断是否在有效期内Date effectDate = DateUtils.addDays(license.getCreateTime(),license.getEffectDays());Date now = new Date();//超出有效期校验不通过return effectDate.getTime() >= now.getTime();}return false;}//AES加密private String AESEncrypt(String content, String key){AES aes = new AES(key.getBytes());return aes.encryptHex(content);}//AES解密private String AESDecrypt(String content, String key){AES aes = new AES(key.getBytes());return aes.decryptStr(content);}//DES加密private String DESEncrypt(String content, String key){DES des = new DES(key.getBytes());return des.encryptHex(content);}//DES解密private String DESDecrypt(String content, String key){DES des = new DES(key.getBytes());return des.decryptStr(content);}public static List<String> getMacList() {ArrayList<String> tmpMacList = new ArrayList<>();try {java.util.Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();StringBuilder sb = new StringBuilder();while (en.hasMoreElements()) {NetworkInterface iface = en.nextElement();List<InterfaceAddress> addrs = iface.getInterfaceAddresses();for (InterfaceAddress addr : addrs) {InetAddress ip = addr.getAddress();NetworkInterface network = NetworkInterface.getByInetAddress(ip);if (network == null) {continue;}byte[] mac = network.getHardwareAddress();if (mac == null) {continue;}sb.delete(0, sb.length());for (int i = 0; i < mac.length; i++) {sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));}tmpMacList.add(sb.toString().toUpperCase());}}} catch(Exception e){}if(tmpMacList.size()<=0){return tmpMacList;}/***去重,别忘了同一个网卡的ipv4,ipv6得到的mac都是一样的,肯定有重复,下面这段代码是。。流式处理***/List<String> unique = tmpMacList.stream().distinct().collect(Collectors.toList());System.out.println("服务器mac地址列表为:" + unique.toString());return unique;}private String toHexString(int integer) {// 将得来的int类型数字转化为十六进制数String str = Integer.toHexString((int) (integer & 0xff));// 如果遇到单字符,前置0占位补满两格if (str.length() == 1) {str = "0" + str;}return str;}@Getter@Setterprivate static class License{//mac地址private String mac;//license文件生成时间private Date createTime;//license有效天数private Integer effectDays;//是否激活private Boolean auth;//licenseprivate String licenseStr;}
}

license生成工具相关推荐

  1. RSA密钥对生成工具代码

    RSA密钥对生成工具 RSA密钥对生成工具 RSA密钥生成 RSA密钥写入文件 RSA密钥生成测试 Github代码仓 RSA密钥对生成工具 最近研究License方案,用到了Java生成RSA公私钥 ...

  2. 有关PHP文档生成工具---PHPDocumentor

    1. 什么是phpDocumentor ? PHPDocumentor是一个用PHP写的工具,对于有规范注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档.老的版本是 phpdoc, ...

  3. 代码文档生成工具Doxygen教程及实例

    程序员的很多文档,特别是有代码的文档,绝大部分都是由一款文档生成工具[Doxygen]生成. 什么是Doxygen? Doxygen 是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件.通 ...

  4. Linux下三个密码生成工具

    http://code.csdn.net/news/2820879 想出一个难破解且容易记的密码对不是一件简单的事情.在我为电脑设定一个新密码,或者在线注册了一个新的账号,需要输入密码的时候,脑袋就一 ...

  5. Web 开发人员必备的随机 JSON 数据生成工具

    在 Web 开发中,经常会需要一些测试数据来测试接口或者功能时候正确.JSON Generator 就是这样一款生成随机 JSON 数据的在线工具,Web 开发人员必备,记得收藏和分享啊. 您可能感兴 ...

  6. 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。

    在开发的过程中开发人员不得不经常要写很多重复的代码, 为了把精力放到更重要的方面去很多人为都做了N多努力,随便google一下自动生成工具, 你都会很容易得到很多这样的工具.园子就有好几款,其中李天平 ...

  7. Java短连接生成工具-思路

    Java短连接生成工具-思路-这里只是模拟一下 package com.csrs.trans.shorturl;import java.util.HashMap; import java.util.M ...

  8. canvas-js贝塞尔曲线代码在线生成工具

    详细内容请点击 canvas贝塞尔曲线代码在线生成工具 可以快速生成二次.三次贝塞尔曲线的源码生成器,方便经常使用到canvas画图的同学使用,可以直接预览效果随意画出自己想要的图像. 生成源码效果预 ...

  9. MRTG教程(二):MRTG配置文件的生成工具cfgmaker(上)

    MRTG配置文件的生成工具cfgmaker 如何使用cfgmaker工具来创建你所需要的mrtg的配置文件.   内容cfgmaker的说明 配置 过滤器的详细介绍 预定义的过滤器名称 各种过滤器的例 ...

最新文章

  1. 关于 synchronizeOnSession
  2. python在windows下import其他模块的注意事项
  3. 居然被韩雪的英语原地圈粉了!更意外的是,她不背语法不请老师,光靠每天10分钟就能练出流利口语!
  4. zabbix历史数据mysql_处理Zabbixl历史数据库解决办法三---使用MySQL中间件为Zabbix数据库扩容...
  5. vs 警告被视为错误
  6. 计算机基础知识_计算机基础知识汇总
  7. 转”使用UBOOT烧写根文件系统和内核的方法
  8. [转载] 老友记——潘石屹 任志强《天台论道》(下)
  9. Atitit 学校工作手册attilax艾提拉总结 目录 1. 团队文化 宗旨 与使命 2 1.1. 学术教育vs 技术教育vs 技能职业教育 2 1.2. 天堂模式vs地狱模式 2 2. 组织结构
  10. 关于微星主板安装ubuntu16.04系统连不上网。ifconfig-a 只显示 lo的
  11. php控制打印机打印文档,word预览正常打印不全怎么解决?
  12. android 横向长图,Android实现截超长图
  13. Python3简单爬虫:爬取猫眼评分top100电影
  14. 多用户商城app小程序开发的功能有哪些
  15. 乐观锁、悲观锁、分布式锁的概念及实现
  16. 解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos
  17. 听 小城大事 大城大事 总结出来的故事(上篇)
  18. 数据的表示和运算,进制转换,BCD码,奇偶校验码,海明校验码,循环冗余码
  19. 面试:百度,阿里等--10/2015
  20. 二维码也能成为大英博物馆的展品?

热门文章

  1. ArcGIS desktop——“热力图”实现方法比较
  2. 数据清洗:Numpy
  3. 机器学习——循环神经网络(RNN)
  4. 时域特征偏度_时域分析——有量纲特征值含义一网打尽
  5. 黑盒圆桌派 | 如何巧用事件营销以“己”博“众”?
  6. XCode8 真机测试打包,让发布测试更轻松
  7. SAAS建站网站和传统建站的区别
  8. 君子签:打破知识付费资源对接窘境,为3类业务场景提供专业解决方案
  9. 【3D目标检测】单目相机成像原理
  10. JavaScript(红宝书)(二)