2012-05-08 82 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應用程序詢問用戶該產品密鑰(由您的網站隨機生成),然後再從網站。缺點是它開始感覺像一個登錄程序而不是激活程序,你需要連接到互聯網,並且它仍然可以被任何體面的海盜相對容易地繞過。

基本上,除非你從字面上配合你的產品密鑰的每一個行動,你的程序(這可能會殺了性能),任何人都可以簡單地刪除/從實際的二進制代碼中跳過產品密鑰檢查。這是一個活躍的研究領域。