- 浏览: 51064 次
- 性别:
- 来自: 湖北
文章分类
- 全部博客 (102)
- ibatis (4)
- spring (12)
- 数据库 (3)
- java (26)
- css (2)
- linux (1)
- hibernate (4)
- Maven (3)
- CMS (1)
- spring mvc (1)
- MyBati (1)
- WEB (1)
- 分布式 (2)
- webservice (2)
- 网络协议 (1)
- TCP (1)
- UDP协议 (1)
- sql优化原则 (1)
- android (1)
- hadoop (10)
- solr (2)
- Scala学习笔记--Actor和并发 (0)
- Spark (4)
- Scala (1)
- hbase (1)
- kafka (1)
- ICE (2)
- 机器学习算法 (2)
- Apache Ignite (1)
- python (1)
- tensorflow (2)
- openstack (1)
- 系统监控 (2)
- 大数据 (1)
- ogg (2)
- Oracle GoldenGate DDL 详细说明 使用手册(较早资料) (0)
- oracle (1)
最新评论
package com.dameng.dmdp.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class License {
private static final String licensePath = "license.dat";
private static final String keyFilename = "key.data";
private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd"); //yyyy-MM-dd HH:mm:ss
//Product.title , AppServer
private String title = "AppServer";
//Product.sku, J2EE/CORBA
private String sku = "J2EE/CORBA";
//Serial.number, MAC Address
private byte[] serialNumber;
//Platform, all
private String platform = "";
//Trial.license
private boolean isTrial;
//License.expiry, 2010-05-12
private String expiry = "";
//Test
public static void main(String[] args) throws Exception{
//
InetAddress ia = InetAddress.getLocalHost();
System.out.println(ia);
String mac =getLocalMac(ia);
//为用户生成license,并email给他
License om = new License();
om.setTitle("AppServer");
om.setSku("J2EE/CORBA");
//String mac = getMACAddress();
om.setPlatform("Windows");
om.setTrial(false);
om.setExpiry("2010-05-12");
License.generateLicense(om,mac);
//在程序中校验license
License.validate();
}
//为用户生成license, 也就是将serialNumber字段的MAC加密
public static License generateLicense(License om,String mac){
try{
//密匙不存在,则生成密匙
if(! new File(keyFilename).exists()){
generateKey();
}
//用密匙加密数据
byte rawKeyData[] = readFile(keyFilename); //用某种方法获得密匙数据
DESKeySpec dks = new DESKeySpec( rawKeyData ); //从原始密匙数据创建DESKeySpec对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKey key = keyFactory.generateSecret( dks );
Cipher cipher = Cipher.getInstance( "DES" ); //Cipher对象实际完成加密操作
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
cipher.init(Cipher.ENCRYPT_MODE, key, sr ); //用密匙初始化Cipher对象
System.out.println("mac-----"+mac);
byte data[] = mac.getBytes(); //用某种方法获取数据
byte encryptedData[] = cipher.doFinal( data ); //正式执行加密操作
System.out.println("加密后的数据:" + encryptedData);
om.setSerialNumber(encryptedData);
//输出license
write(om);
}catch(Exception e){
e.printStackTrace();
}
return om;
}
//生成密匙
private static boolean generateKey(){
boolean result = false;
String algorithm = "DES";
try{
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
kg.init( sr );
SecretKey key = kg.generateKey(); //[-68, -68, -57, -71, 42, -125, 32, 13]
result = writeFile(keyFilename, key.getEncoded()); //把密匙数据保存到文件
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static boolean validate(){
boolean result = false;
try{
License om = read();
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith(om.getPlatform().toLowerCase()) || "all".equals(om.getPlatform())) {
Date expireDate = sdf.parse(om.getExpiry());
if(expireDate.getTime() - new Date().getTime() < 0){
System.err.println("License过期了");
result = false;
}else{
if(om.isTrial()){
System.out.println("试用License有效");
result = true;
}else{
String mac = getMACAddress();
//用密匙解密数据
byte rawKeyData[] = readFile(keyFilename); //用某种方法获得密匙数据
DESKeySpec dks = new DESKeySpec( rawKeyData ); //从原始密匙数据创建DESKeySpec对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKey key = keyFactory.generateSecret( dks );
Cipher cipher = Cipher.getInstance( "DES" ); //Cipher对象实际完成加密操作
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
cipher.init(Cipher.DECRYPT_MODE, key, sr ); //用密匙初始化Cipher对象
byte data[] = om.getSerialNumber(); //用某种方法获取数据
byte encryptedData[] = cipher.doFinal(data); //正式执行加密操作
String tmp = new String(encryptedData);
System.out.println("解密后的数据:" + tmp);
if(mac.equals(tmp)){
System.out.println("License有效");
result = true;
}else{
System.err.println("License无效");
result = false;
}
}
}
}else{
System.err.println("License的平台无效");
result = false;
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static License read(){
License om = null;
try{
om = new License();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(licensePath));
om.setTitle((String)in.readObject());
om.setSku((String)in.readObject());
om.setPlatform((String)in.readObject());
om.setTrial(in.readBoolean());
om.setExpiry((String)in.readObject());
om.setSerialNumber((byte[])in.readObject());
in.close();
}catch(Exception e){
e.printStackTrace();
}
return om;
}
public static boolean write(License om){
boolean result;
try{
File f = new File(licensePath);
if(f.exists())
f.delete();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
out.writeObject(om.getTitle());
out.writeObject(om.getSku());
out.writeObject(om.getPlatform());
out.writeBoolean(om.isTrial());
out.writeObject(om.getExpiry());
out.writeObject(om.getSerialNumber());
out.close();
result = true;
}catch(Exception e){
e.printStackTrace();
result = false;
}
return result;
}
public static boolean writeFile(String path, byte[] bytes){
boolean result = false;
try {
FileOutputStream fos = new FileOutputStream(path);
fos.write(bytes);
fos.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static byte[] readFile(String path){
byte[] bytes = null;
try {
FileInputStream fin = new FileInputStream(path);
bytes = new byte[fin.available()];
fin.read(bytes);
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return bytes;
}
public static String getMACAddress() {
String address = "";
String os = System.getProperty("os.name");
if (os.startsWith("Windows")) {
try {
String command = "ipconfig /all";
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"GB2312"));
String line;
while ((line = br.readLine()) != null) {
if (line.toLowerCase().indexOf("physical address") > 0) {
int index = line.indexOf(":");
index += 2;
address = line.substring(index);
break;
}
}
br.close();
return address.trim();
} catch (IOException e) {
e.printStackTrace();
}
} else if (os.startsWith("Linux")) {
String command = "/bin/sh -c ifconfig -a";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
if (line.indexOf("HWaddr") > 0) {
int index = line.indexOf("HWaddr") + "HWaddr".length();
address = line.substring(index);
break;
}
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
address = address.trim();
return address;
}
private static String getLocalMac(InetAddress ia) throws SocketException {
// TODO Auto-generated method stub
//获取网卡,获取地址
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
System.out.println("mac数组长度:"+mac.length);
StringBuffer sb = new StringBuffer("");
for(int i=0; i<mac.length; i++) {
if(i!=0) {
sb.append("-");
}
//字节转换为整数
int temp = mac[i]&0xff;
String str = Integer.toHexString(temp);
System.out.println("每8位:"+str);
if(str.length()==1) {
sb.append("0"+str);
}else {
sb.append(str);
}
}
System.out.println("本机MAC地址:"+sb.toString().toUpperCase());
return sb.toString().toUpperCase();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public byte[] getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(byte[] serialNumber) {
this.serialNumber = serialNumber;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public boolean isTrial() {
return isTrial;
}
public void setTrial(boolean isTrial) {
this.isTrial = isTrial;
}
public String getExpiry() {
return expiry;
}
public void setExpiry(String expiry) {
this.expiry = expiry;
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class License {
private static final String licensePath = "license.dat";
private static final String keyFilename = "key.data";
private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd"); //yyyy-MM-dd HH:mm:ss
//Product.title , AppServer
private String title = "AppServer";
//Product.sku, J2EE/CORBA
private String sku = "J2EE/CORBA";
//Serial.number, MAC Address
private byte[] serialNumber;
//Platform, all
private String platform = "";
//Trial.license
private boolean isTrial;
//License.expiry, 2010-05-12
private String expiry = "";
//Test
public static void main(String[] args) throws Exception{
//
InetAddress ia = InetAddress.getLocalHost();
System.out.println(ia);
String mac =getLocalMac(ia);
//为用户生成license,并email给他
License om = new License();
om.setTitle("AppServer");
om.setSku("J2EE/CORBA");
//String mac = getMACAddress();
om.setPlatform("Windows");
om.setTrial(false);
om.setExpiry("2010-05-12");
License.generateLicense(om,mac);
//在程序中校验license
License.validate();
}
//为用户生成license, 也就是将serialNumber字段的MAC加密
public static License generateLicense(License om,String mac){
try{
//密匙不存在,则生成密匙
if(! new File(keyFilename).exists()){
generateKey();
}
//用密匙加密数据
byte rawKeyData[] = readFile(keyFilename); //用某种方法获得密匙数据
DESKeySpec dks = new DESKeySpec( rawKeyData ); //从原始密匙数据创建DESKeySpec对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKey key = keyFactory.generateSecret( dks );
Cipher cipher = Cipher.getInstance( "DES" ); //Cipher对象实际完成加密操作
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
cipher.init(Cipher.ENCRYPT_MODE, key, sr ); //用密匙初始化Cipher对象
System.out.println("mac-----"+mac);
byte data[] = mac.getBytes(); //用某种方法获取数据
byte encryptedData[] = cipher.doFinal( data ); //正式执行加密操作
System.out.println("加密后的数据:" + encryptedData);
om.setSerialNumber(encryptedData);
//输出license
write(om);
}catch(Exception e){
e.printStackTrace();
}
return om;
}
//生成密匙
private static boolean generateKey(){
boolean result = false;
String algorithm = "DES";
try{
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
kg.init( sr );
SecretKey key = kg.generateKey(); //[-68, -68, -57, -71, 42, -125, 32, 13]
result = writeFile(keyFilename, key.getEncoded()); //把密匙数据保存到文件
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static boolean validate(){
boolean result = false;
try{
License om = read();
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith(om.getPlatform().toLowerCase()) || "all".equals(om.getPlatform())) {
Date expireDate = sdf.parse(om.getExpiry());
if(expireDate.getTime() - new Date().getTime() < 0){
System.err.println("License过期了");
result = false;
}else{
if(om.isTrial()){
System.out.println("试用License有效");
result = true;
}else{
String mac = getMACAddress();
//用密匙解密数据
byte rawKeyData[] = readFile(keyFilename); //用某种方法获得密匙数据
DESKeySpec dks = new DESKeySpec( rawKeyData ); //从原始密匙数据创建DESKeySpec对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKey key = keyFactory.generateSecret( dks );
Cipher cipher = Cipher.getInstance( "DES" ); //Cipher对象实际完成加密操作
SecureRandom sr = new SecureRandom(); //DES算法要求有一个可信任的随机数源
cipher.init(Cipher.DECRYPT_MODE, key, sr ); //用密匙初始化Cipher对象
byte data[] = om.getSerialNumber(); //用某种方法获取数据
byte encryptedData[] = cipher.doFinal(data); //正式执行加密操作
String tmp = new String(encryptedData);
System.out.println("解密后的数据:" + tmp);
if(mac.equals(tmp)){
System.out.println("License有效");
result = true;
}else{
System.err.println("License无效");
result = false;
}
}
}
}else{
System.err.println("License的平台无效");
result = false;
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static License read(){
License om = null;
try{
om = new License();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(licensePath));
om.setTitle((String)in.readObject());
om.setSku((String)in.readObject());
om.setPlatform((String)in.readObject());
om.setTrial(in.readBoolean());
om.setExpiry((String)in.readObject());
om.setSerialNumber((byte[])in.readObject());
in.close();
}catch(Exception e){
e.printStackTrace();
}
return om;
}
public static boolean write(License om){
boolean result;
try{
File f = new File(licensePath);
if(f.exists())
f.delete();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
out.writeObject(om.getTitle());
out.writeObject(om.getSku());
out.writeObject(om.getPlatform());
out.writeBoolean(om.isTrial());
out.writeObject(om.getExpiry());
out.writeObject(om.getSerialNumber());
out.close();
result = true;
}catch(Exception e){
e.printStackTrace();
result = false;
}
return result;
}
public static boolean writeFile(String path, byte[] bytes){
boolean result = false;
try {
FileOutputStream fos = new FileOutputStream(path);
fos.write(bytes);
fos.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static byte[] readFile(String path){
byte[] bytes = null;
try {
FileInputStream fin = new FileInputStream(path);
bytes = new byte[fin.available()];
fin.read(bytes);
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return bytes;
}
public static String getMACAddress() {
String address = "";
String os = System.getProperty("os.name");
if (os.startsWith("Windows")) {
try {
String command = "ipconfig /all";
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"GB2312"));
String line;
while ((line = br.readLine()) != null) {
if (line.toLowerCase().indexOf("physical address") > 0) {
int index = line.indexOf(":");
index += 2;
address = line.substring(index);
break;
}
}
br.close();
return address.trim();
} catch (IOException e) {
e.printStackTrace();
}
} else if (os.startsWith("Linux")) {
String command = "/bin/sh -c ifconfig -a";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
if (line.indexOf("HWaddr") > 0) {
int index = line.indexOf("HWaddr") + "HWaddr".length();
address = line.substring(index);
break;
}
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
address = address.trim();
return address;
}
private static String getLocalMac(InetAddress ia) throws SocketException {
// TODO Auto-generated method stub
//获取网卡,获取地址
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
System.out.println("mac数组长度:"+mac.length);
StringBuffer sb = new StringBuffer("");
for(int i=0; i<mac.length; i++) {
if(i!=0) {
sb.append("-");
}
//字节转换为整数
int temp = mac[i]&0xff;
String str = Integer.toHexString(temp);
System.out.println("每8位:"+str);
if(str.length()==1) {
sb.append("0"+str);
}else {
sb.append(str);
}
}
System.out.println("本机MAC地址:"+sb.toString().toUpperCase());
return sb.toString().toUpperCase();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public byte[] getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(byte[] serialNumber) {
this.serialNumber = serialNumber;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public boolean isTrial() {
return isTrial;
}
public void setTrial(boolean isTrial) {
this.isTrial = isTrial;
}
public String getExpiry() {
return expiry;
}
public void setExpiry(String expiry) {
this.expiry = expiry;
}
}
发表评论
-
jvm
2018-03-26 09:47 359http://www.cnblogs.com/moonands ... -
多线程
2015-11-11 16:05 308public class ThreadDemo3 { ... -
java之装饰设计模式和继承的简单区别
2015-10-29 16:24 778http://jiangnanlove.iteye.com/b ... -
java注解
2015-10-26 11:18 369Java自定义注解小结 作者:谢伟伦 学习java有两年之余了 ... -
字符串补零除0
2015-10-21 11:55 657//去零操作 String str = "0050 ... -
代理模式与装饰模式差别,适配器模式
2015-10-07 19:29 700http://blog.csdn.net/hitprince/ ... -
jsoup解析html
2015-03-31 11:17 796jsoup:解析HTML用法小结 原文 http://my ... -
java 堆和栈
2014-11-27 15:18 4951.栈(stack)与堆(heap)都是J ... -
java内部类、静态内部类 小结
2014-11-26 14:12 5161)首先,用内部类是因 ... -
java 23种设计模式
2014-11-19 14:56 566http://zz563143188.iteye.com/bl ... -
Java调用webservice接口方法
2014-11-19 14:36 4841. Java调用webservice接口方法 webserv ... -
java基本类型
2014-11-05 14:05 673基本类型比较 -
java修饰符权限
2014-11-05 13:58 569(1)public:可以被所有其他类所访问。 (2)priv ... -
类型转换
2014-11-05 13:44 471short s1 = 1; s1 = s1 + 1;有错,s1 ... -
Sring x = new String("xyz")
2014-11-05 13:32 479只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了 ... -
java内部类和静态内部类调用
2014-06-23 14:06 517内部类 public class Test { clas ... -
匿名内部类
2014-06-18 15:00 407匿名内部类也就是没有 ... -
类的加载周期
2014-06-16 12:47 340类什么时候被加载/类加载时机: 第一:生成该类对象的时候,会 ... -
内部类
2014-05-05 14:43 467http://www.cnblogs.com/mengdd/a ... -
工厂模式
2014-03-24 15:17 496举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 ...
相关推荐
HP iLO license 生成器,实测iLO4可用,可生成高级license。
保证java web ,spirngboot,tomcate web安全,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证
SAP license生成软件SapLicGen
自己开发的用于软件license授权的通用解决方案,可以用于自己的软件产品授权保护。源码部署到服务器,客户端用于生成license,生成的license结果服务器验证通过后才视为合法有效的license。
dbeaver--ee dbeaver-ue cloudbeaver-ee LICENSE生成器
用Java实现license的生成器,包括Java源码以及图形化界面
1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。
1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。
License授权组件,包括Java源码以及客户端界面,可生成授权文件。
使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
java license生成验证的实现
用于Altum Designer 的license冲突。 当局域网里面有两台以上的机器同时使用Altum Designer时(使用同一个license),会出现license冲突错误,导致其中一台无法正常启动,本注册机可以让你自己更换注册的license,这样...
2.license生成客户端(GUI/shell方式); 3.客户计算机机器码生成程序(shell); 4.license文件最外层使用RSA加解密算法,内置自定义加解密算法作为二层加密。 5.文件包含: a.对接服务动态库 b.获取服务器机器码 c...
Ai RoboForm 最新 6.9.97.0 含 license生成器,付使用说明,生成license可以注册为专业版,不用破解文件,保证数据安全,亲自验证有效。运行 license生成器时请暂时关闭杀毒软件。为了防止杀软阻止下载,压缩包加了...
Ai RoboForm U盘版最新版 6.9.97.0 含 license生成器,付使用说明,生成license可以注册为专业版,不用破解文件,保证数据安全,亲自验证有效。运行 license生成器时请暂时关闭杀毒软件。为了防止杀软阻止下载,...
Ai RoboForm Portable U3版 6.9.97.0 含 license生成器 亲自验证有效。内附使用说明,本人sandisk U3 验证通过,可以注册为专业版。 运行 license生成器时请暂时关闭杀毒软件。为了防止杀软阻止下载,压缩包加了密码...
运行Test文件会在bin目录下生成两个license文件,一份用于客户端验证,一份公司自己留存
ise 11.3 crack license 生成器 windowxp可用
UCAM_license生成器