/*** 一、首先介绍下license授权机制的原理:1、 生成密钥对,方法有很多。2、 授权者保留私钥,使用私钥对包含授权信息(如使用截止日期,MAC地址等)的license进行数字签名。3、 公钥给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。***/package cn.melina.license;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Properties;import java.util.prefs.Preferences;import javax.security.auth.x500.X500Principal;import de.schlichtherle.license.CipherParam;import de.schlichtherle.license.DefaultCipherParam;import de.schlichtherle.license.DefaultKeyStoreParam;import de.schlichtherle.license.DefaultLicenseParam;import de.schlichtherle.license.KeyStoreParam;import de.schlichtherle.license.LicenseContent;import de.schlichtherle.license.LicenseParam;import de.schlichtherle.license.LicenseManager;/** * CreateLicense * @author melina */public class CreateLicense {//common paramprivate static String PRIVATEALIAS = "";private static String KEYPWD = "";private static String STOREPWD = "";private static String SUBJECT = "";private static String licPath = "";private static String priPath = "";//license contentprivate static String issuedTime = "";private static String notBefore = "";private static String notAfter = "";private static String consumerType = "";private static int consumerAmount = 0;private static String info = "";// 为了方便直接用的API里的例子// X500Princal是一个证书文件的固有格式,详见APIprivate final static X500Principal DEFAULTHOLDERANDISSUER = new X500Principal("CN=Duke、OU=JavaSoft、O=Sun Microsystems、C=US");public void setParam(String propertiesPath) {// 获取参数Properties prop = new Properties();InputStream in = getClass().getResourceAsStream(propertiesPath);try {prop.load(in);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}PRIVATEALIAS = prop.getProperty("PRIVATEALIAS");KEYPWD = prop.getProperty("KEYPWD");STOREPWD = prop.getProperty("STOREPWD");SUBJECT = prop.getProperty("SUBJECT");KEYPWD = prop.getProperty("KEYPWD");licPath = prop.getProperty("licPath");priPath = prop.getProperty("priPath");//license contentissuedTime = prop.getProperty("issuedTime");notBefore = prop.getProperty("notBefore");notAfter = prop.getProperty("notAfter");consumerType = prop.getProperty("consumerType");consumerAmount = Integer.valueOf(prop.getProperty("consumerAmount"));info = prop.getProperty("info");}public boolean create() {try {/************** 证书发布者端执行 ******************/LicenseManager licenseManager = LicenseManagerHolder.getLicenseManager(initLicenseParams0());licenseManager.store((createLicenseContent()), new File(licPath));} catch (Exception e) {e.printStackTrace();System.out.println("客户端证书生成失败!");return false;}System.out.println("服务器端生成证书成功!");return true;}// 返回生成证书时需要的参数private static LicenseParam initLicenseParams0() {Preferences preference = Preferences.userNodeForPackage(CreateLicense.class);// 设置对证书内容加密的对称密码CipherParam cipherParam = new DefaultCipherParam(STOREPWD);// 参数1,2从哪个Class.getResource()获得密钥库;参数3密钥库的别名;参数4密钥库存储密码;参数5密钥库密码KeyStoreParam privateStoreParam = new DefaultKeyStoreParam(CreateLicense.class, priPath, PRIVATEALIAS, STOREPWD, KEYPWD);LicenseParam licenseParams = new DefaultLicenseParam(SUBJECT,preference, privateStoreParam, cipherParam);return licenseParams;}// 从外部表单拿到证书的内容public final static LicenseContent createLicenseContent() {DateFormat format = new SimpleDateFormat("yyyy-MM-dd");LicenseContent content = null;content = new LicenseContent();content.setSubject(SUBJECT);content.setHolder(DEFAULTHOLDERANDISSUER);content.setIssuer(DEFAULTHOLDERANDISSUER);try {content.setIssued(format.parse(issuedTime));content.setNotBefore(format.parse(notBefore));content.setNotAfter(format.parse(notAfter));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}content.setConsumerType(consumerType);content.setConsumerAmount(consumerAmount);content.setInfo(info);// 扩展content.setExtra(new Object());return content;}}

取消

评论

java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,防止止拷贝应用...相关推荐

  1. java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,以防止拷贝应用...

    展开全部 /*** 一.首先介绍下license授权机制的原理: 1. 生成密钥对,方法有很多. 2. 授权者保留私e69da5e6ba9062616964757a686964616f31333335 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java jvm内存地址_深入Java虚拟机——JVM内存详解

    在C++中,程序员拥有每一个对象的所有权,但与此同时还肩负着释放对象内存空间的责任:而Java由于有了虚拟机的帮助,程序员拥有对象的所有权的同时不再需要释放对象的内存空间.由于是JVM自动进行对象内存 ...

  4. java日志切割工具_用 Java 实现的日志切割清理工具

    对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方式进行清理,会花费太多时间,并且很多时候难以满足实际要求.例如:如何在每个星期六凌 ...

  5. java account函数的_用Java进行同时函数调用 - java

    在我的应用程序中,我以以下方式加载缓存. 加载用户缓存loadUserCache(); 加载帐户缓存loadAccountCache(); 加载客户缓存loadCustomerCache(); 上述每 ...

  6. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  7. java编写k线_用Java绘制K线 (转)

    ---- Java语言中的Applet(Java小程序)和Application(Java应用程序)是在结构和功能上都存在很大差异的两种不同的编程方式.Applet应用于Web页上,可做出多姿多彩的页 ...

  8. java 检测硬盘原理_深入Java核心 Java内存分配原理精讲

    Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ...

  9. java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载

    不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...

最新文章

  1. “智源论坛Live”报名 | 清华大学游凯超:领域适配前沿研究--场景、方法与模型选择...
  2. 在多个游戏视图间切换实现效果
  3. ◆[转]瓶子生日密码之2月2日
  4. python中函数修饰符_python中的函数修饰符
  5. 如何做好OA流程审批?
  6. poj 3797(状态压缩dp)
  7. php 二维数组 根据某个字段排序
  8. 详解PCB抄板过程,太牛了!
  9. 1.编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
  10. Pyinstaller 打包Pyside2 报错qt.qpa.plugin
  11. Maven知识补充(项目模型变量,Maven属性,依赖项的范围,查找公共存储库的依赖项等)
  12. python画圆角矩形_js绘制圆角矩形
  13. 服装ERP软件首要的好处都有哪些?
  14. 易语言程序转c语言,c语言实现简单的易语言
  15. 把maven的setting配置文件改为需要jdk版本
  16. JavaScript 学习总结(全)
  17. 职场防背锅的有效方式
  18. L1-6 喝嘤料 (15 分)
  19. LeetCode 89 双周赛
  20. Unity脚本子线程修改UI的一种方式

热门文章

  1. 树莓派最新最快更新源2020.06.06
  2. ROS2+nav2+激光雷达导航(上)
  3. 连接数据库不同方式会影响TTBF快慢
  4. 计算机一级比分多少,如何在电子表格中打出比分?
  5. 微信小程序时间显示几分钟前、几小时前、几天前....
  6. 【OpenIM原创】uni-app使用之 初始化会话 消息 好友 监听器
  7. Interpro 安装问题
  8. 智能科学与技术与数据科学与大数据技术哪个好
  9. 如何将复杂的物理建模过程化繁为简?
  10. 有没有网上打印可以派送的?