Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何加密软件工具的许可证?_Java_Security_Licensing_Decode_Encode - Fatal编程技术网

Java 如何加密软件工具的许可证?

Java 如何加密软件工具的许可证?,java,security,licensing,decode,encode,Java,Security,Licensing,Decode,Encode,我用Java代码为一个软件工具创建了一个许可证文件,该文件有一个序列化的对象,其中包含一些字段,如创建日期、过期日期、cpuid、执行计数器。 现在,我需要保护这个文件并将其交给用户,以便客户端软件可以读取该文件以检查过期日期和执行计数器。 我知道这是很容易避免的,但对于离线许可,这是我最好的主意,对其他人来说已经足够了。 所以为了加密这个文件,我想使用RSA,用私钥对这个文件进行编码,然后将公钥释放给客户端。因此,客户端软件或所有知道公钥的软件都可以读取此文件,但没有人可以更改或写入新文件(除

我用Java代码为一个软件工具创建了一个许可证文件,该文件有一个序列化的对象,其中包含一些字段,如创建日期、过期日期、cpuid、执行计数器。 现在,我需要保护这个文件并将其交给用户,以便客户端软件可以读取该文件以检查过期日期和执行计数器。 我知道这是很容易避免的,但对于离线许可,这是我最好的主意,对其他人来说已经足够了。 所以为了加密这个文件,我想使用RSA,用私钥对这个文件进行编码,然后将公钥释放给客户端。因此,客户端软件或所有知道公钥的软件都可以读取此文件,但没有人可以更改或写入新文件(除非他使用新私钥并更改公钥)。 但是主要的问题是RSA密钥长度,因为我的对象对于2048密钥长度来说可能太大,如果三个月后我们决定向对象添加一个新字段,会发生什么? 您是否知道加密此许可证的有效方法,以便只有服务器才能发布有效的许可证?使用DES或其他对称算法更好吗?
谢谢,请使用固定长度的安全哈希算法(如256位或384位)对对象进行哈希。然后RSA对对象的哈希而不是对象本身进行签名。将签名附加到许可证文件


我不建议使用对称算法,因为这样,任何反向工程逻辑以检查许可证的人都会知道如何创建自己的许可证。

我建议使用任何可用的许可证解决方案,而不是在您的密码学概念不太清楚的情况下自己实现它。这将节省您和客户的时间


但是使用哈希函数,我无法从许可证中检索信息,或者我错了?我不知道你错了,只是感到困惑。将信息添加到许可证中如何取消您以前可以执行的任何操作?在我生成SK和PK的服务器上,我有一条类似“我是服务器”的消息,首先将SHA2应用于消息,然后在此消息摘要上应用RSA(使用SK)。在客户机上,我使用PK对签名进行解码,从而获得消息摘要。然后使用SHA2,我知道消息是否真的是由服务器发送的。但是如果用户创建了自己的PK和SK,并用这个新的PK更改了服务器的PK,执行了上述步骤,他就避开了系统?@luca不,他没有避开系统。任何知道你PK的人都可以告诉你他的驾照是假的。他唯一能撒谎的人就是他自己。(也许你对软件许可的作用有一些误解。这不是一个强制执行计划,这是警察和法院的职责。它让人们能够准确地知道他们被许可做什么,并轻松地遵守这些要求,而不会有不必要的困难。)用一种更符合常识的方式说:如果你关心那些改变你PK的人,那么你当然也关心那些完全禁用许可证检查的人。然而,你解决人们禁用许可证检查的问题(无论是软件强制执行、法律手段、社会压力等等)也应该是你如何解决人们更改PK的问题。这与如何编码和验证许可证的技术问题完全不同。