2014-07-11 39 views
-3

我有一個班級ProductKeyLib,它是項目的一部分,該項目本身是解決方案MyProgram的一部分。截至目前,這個lib只檢查密鑰是否有效,但不會生成密鑰。 密鑰生成接口將在項目MyProgram-KeyGen中,該解決方案也是解決方案MyProgram的一部分。在兩個項目中使用班級

現在,棘手的部分: 我想在一個類中同時具有兩個函數(生成和檢查),因爲,正如您所猜測的,當一切都在時,密鑰生成和密鑰檢查之間的100%兼容性可以更好地實現一個文件,而且我的單元測試將會更容易。

但是:這兩個程序都應該在他們的程序中包含該部分,我不想擁有特殊的dll。此外,只應該包括檢查部分,而不是密鑰生成。

我可以在VisualStudio中做到嗎?如果是這樣,怎麼樣?

+0

保持原樣。編寫一個集成測試,以確保它們保持一步... –

+0

您可以將源代碼文件作爲鏈接包含到項目中。這將是兩個不同的類,但是您將擁有一個到它們的單個訪問點。只需按下「添加現有項目」對話框中的「添加」按鈕上的箭頭,然後選擇「添加爲鏈接」 – mazharenko

+0

不要認爲這是一個好主意,但是像@mazharenko提到的那樣,您可以這樣做。 。 –

回答

1

嗯,這可能不是一個好主意,但你可以使用編譯器定義和鏈接源文件的組合。

所以你會有一個單一的cs文件,其中包含所有鏈接到這兩個項目的代碼(沒有公共庫 - 只是單個代碼文件)。在這裏面,你把所有的代碼:

#if KeyGen 
public string GenerateKey(...) 
{ 
    ... 
} 
#endif 

public bool CheckKey(...) 
{ 
    ... 
} 

然後,在你凱基項目,你會放一個編譯器定義命名KeyGen,並且生成的代碼將只在凱基部分進行編譯,而不是客戶端應用程序。

但是,這仍然反映了「默默無聞的安全性」。如果密鑰生成和檢查確實很重要,那麼這是不夠的。例如,只要知道密鑰是如何被檢查的,在很多情況下你可以很容易地找到構建密鑰的方法(即使沒有使用GPU,甚至蠻力算法現在都非常可靠)。

+0

每種許可證密鑰或密鑰檢查都可以通過程序進行反向設計和/或刪除。所以每個程序都可以在不需要密鑰或任何東西的情況下工作。沒有「正在運行」的DRM - 除了保證程序在我自己的服務器上安全,只向客戶提供API。 (這不會與我們的客戶合作,因爲有些需要獨立於互聯網)。所以,是的,這就像每個許可證密鑰一樣,是「隱藏的安全性」。如果你有一個想法如何做一個100%安全的離線檢查,最好不要讓我知道 - 去賣給RIAA,他們會支付你數百萬美元。 – Alexander

+0

PS:我需要提及的是,該程序是50%編譯C#和50%「編譯」(混淆/縮小)JS? PPS:我非常小心,不會在JS中包含許可證檢查:p – Alexander

+0

是的,你正在向合唱團傳道。如果只有負責DRM的人員理解了如何輕鬆實現任何支票......我實際上也必須實施DRM一次。您必須通過發送短信激活應用程序。驗證過程非常穩健。客戶端的檢查?只需在這裏添加一個小小的跳躍,而且耶,沒有檢查! :d – Luaan