1

我开发了一个基于 Java 的桌面应用程序,我想用产品密钥分发它,这样当输入正确的密钥时,应用程序就会被激活。因此,个人用户的产品密钥应该不同。我如何在 Java 中实现这个概念。提前致谢

4

4 回答 4

0

基于 Mikera 的回答,针对您的安全需求非常重要。在你的情况下,你可能只需要一种快速的方法来过滤掉 99.9% 的黑客。只有采取法律行动才能阻止剩下的 0.1%,但您(可能)不需要担心它们。Mikera 的解决方案有点简单,但在您觉得需要更好的东西之前应该可以正常工作。

一个更强大但更庞大的解决方案是让您的用户在您的网站上注册,并让您的 Java 应用程序向用户询问此产品密钥(由您的网站随机生成),然后从网站上查找它。缺点是它开始感觉像是一个登录过程而不是激活过程,你需要连接到互联网,并且任何体面的盗版者仍然可以相对容易地绕过它。

基本上,除非您将产品密钥与程序中的每一个操作联系起来(这可能会降低性能),否则任何人都可以简单地从实际二进制代码中删除/跳过产品密钥检查。这是一个活跃的研究领域。

于 2012-05-08T06:14:03.077 回答
0

这取决于您希望您的密钥安全性有多强。

一种非常简单的方法是只创建用户电子邮件地址的哈希并将其作为密钥提供给用户。该应用程序可以询问用户的电子邮件地址和密钥,然后重新创建哈希码以确认该密钥对于该用户是正确的。

这显然不会击败坚定的攻击者......但是坚定的攻击者将能够击败您实施的任何其他计划。如果你要做的只是确保注册并防止随意复制,那么这种方案应该足够好了。

于 2012-05-08T05:56:32.147 回答
0

我认为您可以通过查找处理器或硬盘的序列号来做到这一点,这意味着处理器序列号和硬盘序列号对于每台机器都是唯一的,因此您的程序应该获取这些序列号中的任何一个并对其应用一些算法来生成产品密钥。这是在java中查找处理器和硬盘序列的链接。

http://www.rgagnon.com/javadetails/java-0580.html

希望这会帮助你 。

于 2012-05-08T06:03:36.670 回答
0

我听说的一个是为每个副本分配一个序列号,有些使用客户名称。然后使用非对称密钥计算密钥签名。您的程序可以使用公钥来验证签名。此QA更详细地回答了您的问题。

于 2012-05-08T06:08:07.043 回答