通过许可证或密钥保护Java应用程序
我想制作一个桌面应用程序,只在有密钥或许可证的机器上运行。通过许可证或密钥保护Java应用程序,java,security,licensing,Java,Security,Licensing,我想制作一个桌面应用程序,只在有密钥或许可证的机器上运行。 如何实现这一目标?这取决于您计划拥有多少客户以及分销模式。您可以使用许可证服务器,但这需要为客户提供internet连接。您还可以使用USB加密狗来管理许可 没有一个完美的系统可以让你在简单、努力和价格之间做出权衡。你可以在线跟踪macIP机器的许可证发放情况。即使在windows中,您也可以在注册表中编写api,但您仍然可以这样做。查找下面的代码段以读取注册表- public static final String readRegis
如何实现这一目标?这取决于您计划拥有多少客户以及分销模式。您可以使用许可证服务器,但这需要为客户提供internet连接。您还可以使用USB加密狗来管理许可
没有一个完美的系统可以让你在简单、努力和价格之间做出权衡。你可以在线跟踪macIP机器的许可证发放情况。即使在windows中,您也可以在注册表中编写api,但您仍然可以这样做。查找下面的代码段以读取注册表-
public static final String readRegistry(String location, String key){
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query " +
'"'+ location + "\" /v " + key);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
if( ! output.contains("\t")){
return null;
}
// Parse out the value
String[] parsed = output.split("\t");
return parsed[parsed.length-1];
}
catch (Exception e) {
return null;
}
}
公共静态最终字符串读取注册表(字符串位置,字符串键){
试一试{
//运行reg查询,然后使用StreamReader读取输出(内部类)
Process Process=Runtime.getRuntime().exec(“reg查询”+
“'”+位置+“\”/v“+键);
StreamReader=新的StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
字符串输出=reader.getResult();
//输出具有以下格式:
//\n\n\n\t\t
如果(!output.contains(“\t”)){
返回null;
}
//解析出值
String[]parsed=output.split(“\t”);
返回已解析的[parsed.length-1];
}
捕获(例外e){
返回null;
}
}
如果您想混淆使用,请在类级别使用。这完全取决于您想使其变得多么安全 Java的问题是您可以对其进行反向编译。因此,如果有人想要,他们可以下载你的软件,对其进行反向编译,然后删除你设置的任何安全性(如果他们需要,再重新分发) 这只是一个问题,如果你打算进入大众市场并出售它,那么盗版实际上是一个问题 如果你不关心这个问题,那么你可以在线或离线检查 我工作的公司采用在线方式;有几个步骤: 编辑:我已经改变了它的工作方式,因为旧的方式是维护的噩梦
- (这可以包含你想要的任何东西,事实上,每个用户都必须是唯一的
name
公司
电子邮件
- 然后是一个
。即你经常看到的键
JDU8-AJS9-88DF-SASF-ASF9
每次程序成功在线验证时,它也会向许可证文件中添加一个离线访问密码,这意味着它对临时互联网宕机具有很强的抵抗力,并且只有当互联网宕机超过一周/月/无论设置多长时间,它才会停止工作。是一种在线验证(例如每次启动时)一个选择?不管怎样,我认为,你的应用程序很可能会被破解,因为一切都是站在客户一边的。@NHAHDH付出了足够的努力,任何事情都是如此…@will:云服务的情况并非如此(除非你破解它,否则会引发人们追逐你)是的,我知道,买他没有说这是客户端还是基于云我不太明白,当用户购买时,你会使用他们在购买时提供的信息向他们提供一个包含哈希licensekey的许可证文件吗?或者你只是创建一个密钥,然后用户将此信息和其他信息输入到Program中并在第一次运行时生成许可证文件。@当有人购买时,我们会通过电子邮件将其许可证详细信息发回给他们(以便与他们确认)。启动程序时,它会查找许可证文件。然后,它会连接文件中的数据,并通过哈希函数传递结果字符串-如果此哈希与我们为其lic提供的哈希匹配