问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-25 20:05

我来回答

4个回答

热心网友 时间:2023-10-14 19:48

你可以在滚动条的上,下分别添加一个控制块,类似三角形。用控制块调比较慢。

热心网友 时间:2023-10-14 19:49

http://blog.csdn.net/a9529lty/article/details/10071379
绝对好用

热心网友 时间:2023-10-14 19:49

/*** 一、首先介绍下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 param
private static String PRIVATEALIAS = "";
private static String KEYPWD = "";
private static String STOREPWD = "";
private static String SUBJECT = "";
private static String licPath = "";
private static String priPath = "";
//license content
private 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是一个证书文件的固有格式,详见API
private 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 block
e.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 content
issuedTime = 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 block
e.printStackTrace();
}
content.setConsumerType(consumerType);
content.setConsumerAmount(consumerAmount);
content.setInfo(info);
// 扩展
content.setExtra(new Object());
return content;
}
}

追问在哪里能添加本机MAC呢?是LicenseContent中么?而且添加后验证证书的时候是在verify中直接验证么?

热心网友 时间:2023-10-14 19:50

你讲的什么B玩意,驴头不对马嘴
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
福建南安都有哪些市场 端午节去南安旅行的线路有哪些值得分享? 南安有哪些特色商业街 把一个棱长是10厘米的正方体铁块熔铸成一个底面积是20厘米的圆锥形铁块... 把一块棱长10厘米的正方体铁块熔铸成一个底面直径是20厘米的圆柱形零件... 0x0438ef0指令引用的0x0438ef0内存.该内存不能为“read”的错误提示... SONY 索尼 DSC-RX100M5A 1英寸数码相机 黑色(8.8-25.7mm、F1.8) Vl... SONY 索尼 DSC-RX100M5A 1英寸数码相机 黑色(24-70mm、F1.8-F2.8)-购... 索尼RX100 M5A数码相机 索尼RX100 M5A数码相机:小巧便携,成像卓越 高分求名:本人姓王,原本给孩子起名王禹墨,但与生辰八字不合,孩子生辰八字是:壬辰 甲辰 丁未 戊申 如何使用license保护labview开发的软件 怎样才是正确投球:姿势、方法、、怎样才能投进球? 原来单位使用的金蝶软件,电脑重做的系统后,如何进行注册,引入licens... 篮球怎麽传球又快有准 , 篮球传接球方式有哪些? 安装PROE5.0过程中中运行keygen后的license文件是个加密文件 什么是license机制 篮球中多人行进中传球的动作要领是什么?最好是篮球书上的话 怎样破解有license的wma文件 篮球的运球、传球技术 License是什么,有什么用途? 如何做到把软件的license加密,但不影响软件注册 传球动作的四个要领是什么? 如何击地传球 篮球 技巧 如何在电脑上查看微信的聊天记录 右侧腋下见一大小约0.6:0.4cm淋巴结回声,皮髓质分界清,cdfl其內见点状血流信号。怎么办? 双颈多个淋巴结可见,部分淋巴结肿大。淋巴结皮髓质分界清,内部供血呈门型分布。请问医生有问题吗? 双肾可见,实质回声稍增强,皮髓质分界清有没关系 双侧腋下可见数个低回声结节,较大者约12x6mm,皮髓质分界清是什么意思 请教高手!用license文件加密的软件如何破解 被license加密的word文档,知道密码,想转换成正常格式的word文档(没有密码的那种) 在安装pro/e 时,需要虚拟网卡,该怎么处理 篮球基本功的练习? 试述双手接反弹球的动作方法。 license文件代码解密 用license注册的软件该如何破解? 如何用Java 编写 license 程序 winlicense加密工具在虚拟机里怎么用 被WinLicense加密后的软件打开时序列号对话框如何弹出的?我的为何不弹出。 如何引入License文件 电脑开机出现“已重新设置bios请决定如何继续”是怎么了? 怎样重新设置BIOS 怎么修改BIOS?细节步骤? 手机上怎么下载植物大战僵尸年度版? 植物大战僵尸1在手机上怎么下载?在哪里下载? 植物大战僵尸年度版手机下载安装到手 手机如何下载植物大战僵尸年度版? 哪里可以下载植物大战僵尸年度版中文版苹果手机运行? 植物大战僵尸1年度版的下载云网盘谁有啊谢谢了