/*** 一、首先介绍下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中两台电脑通信_如何实现两台PC终端基于MAC地址互相通信相关推荐

  1. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  2. 佳能打印机 另一台计算机正在使用,多台电脑系统不同如何共享一台佳能打印机的简单设置...

    在办公环境中,经常会遇到这种情况,就是两台或多台计算机(电脑)所装的操作系统不一样,有的是老旧的XP,有的是32位的win7 ,还有的是64位的win7 或者win10,那么如何实现多台电脑多个系统共 ...

  3. vlan划分_基于MAC地址划分VLAN配置示例

    1.组网需求 图1 配置基于MAC地址的VLAN划分组网图 如上图1所示,某个公司的网络中,网络管理者将同一部门的员工划分到同一VLAN.为了提高部门内的信息安全,要求只有本部门员工的PC才可以访问公 ...

  4. 为什么不直接使用MAC地址进行通信、为什么不直接使用IP地址通信

    为什么不直接使用MAC地址进行通信 1.全世界存在各种各样的异构网络,它们使用不同的硬件地址(网络的异构性体现),要使这些异构网络能够进行通信,就需要非常复杂的硬件地址转换工作,因此由用户主机来完成这 ...

  5. 设备一路485如何供两台电脑使用_电脑没装打印机怎样共享打印

    (放松心情,可以听听音乐) 你一定遇到过需要在电脑(下面简称A电脑)打印文件,但是A电脑又没有安装打印机的情况,很多人总是把文件转移到有打印机的电脑(为方便叙述下面就叫主电脑啦)上再来打印:其实我们可 ...

  6. java中接口什么时候用_我什么时候应该在java中使用接口?

    在Java中精确使用接口的一个很好的例子将是理想的,适用于任何特定的规则. 看看丹以前所有的问题,他似乎只是逐字逐句地张贴家庭作业/考试问题. 令人惊讶的是,这些不是考试题或其他-今天才找到这个网站, ...

  7. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  8. 两个vlan之间如何通信_如何桥接两个不同的VLAN?

    为了更好理解本文,强烈建议先阅读上一篇文章: 两个vlan互通和划分到同一个vlan有何区别? 本文是上一篇文章的姊妹篇. 有读者会说,这还不容易啊?一根网线的两端同时插入交换机,网线的一段连VLAN ...

  9. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

最新文章

  1. 万字干货介绍WebAR的实现与应用
  2. 自定义堆栈(回文检测)
  3. Airlaunch 快捷设置代码分享
  4. .net Csharpt C# UDP 异步发送信息 代码实例
  5. 剑指Offer——Java答案
  6. python中出现ascii编码问题的解决办法
  7. Mysql和vs2010 的连接
  8. linux卸载HBA卡驱动
  9. 答辩复试技巧技巧1.0
  10. 外贸软件常见图片类问题丨汇信
  11. 2019蓝桥杯 - 迷宫
  12. 在iPhone/iPad/iPod touch Home主屏幕界面加快捷方式
  13. excel 公式和函数
  14. LeeCode 算法(Java实现)系列汇总
  15. GC.SuppressFinalize()的正确用法
  16. opencv几个自动检测图片方向的方法
  17. Git 各指令的本质,真的是通俗易懂!
  18. [英语]在英语学习的过程中学到的学习方法
  19. 各种进制转换通用代码
  20. 设计模式(十)----策略模式

热门文章

  1. 读后感:【许岑—如何成为有效学习的高手】
  2. 云计算基础-云计算基础介绍整理
  3. Gnuplot 绘图
  4. 常见算法的时间复杂度 Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…
  5. 携手推进国产化发展,未来智安与麒麟软件完成兼容互认证
  6. 【Mac 教程系列第 15 篇】如何查看 Mac 产品的序列号
  7. 一文了解二进制和CPU工作原理
  8. c++进制转换(完整)
  9. 广东迅视问泸州第三代社保卡发行 现有二代社保卡仍可正常使用吗?
  10. 【ANSYS APDL】如何将变量、矩阵等数据导出到TXT文件?