2012-05-08 87 views
1

我开发了一个基于Java的桌面应用程序,我想用产品密钥分发它,以便在输入正确密钥时激活应用程序。所以,对于个人用户来说,产品密钥应该是不同的。我如何在Java中实现这个概念。在此先感谢Implement产品密钥

+0

也许这线程将帮助您:http://stackoverflow.com/questions/646086/implementation-for-product-keys – acattle

回答

0

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

一个非常简单的方法是只创建用户的电子邮件地址的哈希值,并把这个给用户的关键。应用程序可以询问用户的电子邮件地址和密钥,然后重新创建哈希码以确认密钥对于该用户是否正确。

这显然不会打败一个坚定的攻击者......然而,一个坚定的攻击者就能够打败你制定任何其他方案。如果你想要做的只是确保注册并防止随意复制,那么这种方案应该足够好。

0

我想你可以通过查找处理器或硬盘驱动器的序列号做的,这意味着处理器序列号和硬盘的序列号将是每一台机器唯一的,所以你的程序应该得到这些序列号,并应用一些算法在其上生成产品密钥。这里是在java中找到处理器和硬盘的序列的链接。

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

希望这会帮助你。

+0

如果用户改变其CPU或硬盘驱动器是什么?如果他想在另一台计算机上使用该程序,该怎么办?我认为这些都是非常合理的,而且通常情况下会让您的建议成为问题而不是解决方案。 –

+0

这是一个巨大的陷阱。许多OEM出售的计算机几乎全部共享*相同的序列号,几乎适用于所有硬件。最接近你会得到独特的是主板的UID,这甚至不接近。 – Thomas

+0

我同意你的看法,如果用户更改CPU或硬盘有问题。但如果你想分发你的应用程序而不被盗版,这是最好的。 – Vijay

0

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

0

以Mikera的答案为基础,以您的安全需求为目标非常重要。就你而言,你可能只需要一个快速的方法来过滤掉99.9%的所有黑客。没有任何法律行动会阻止剩余的0.1%,但是你(可能)不需要担心它们。 Mikera的解决方案有点简单,但应该工作得很好,直到你觉得你需要更好的东西。

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

基本上,除非你从字面上配合你的产品密钥的每一个行动,你的程序(这可能会杀了性能),任何人都可以简单地删除/从实际的二进制代码中跳过产品密钥检查。这是一个活跃的研究领域。