天天看點

.NET平台開源項目速覽(9)軟體序列号生成元件SoftwareProtector介紹與使用1.基本功能介紹2.核心的SKGL源碼分析3.SKGL核心功能調用5.資源

<b>閱讀目錄</b>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html#_label0">1.基本功能介紹</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html#_label1">2.核心的SKGL源碼分析</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html#_label2">3.SKGL核心功能調用</a>

<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html#_label3">5.資源</a>

看看界面所示範的功能截圖:

.NET平台開源項目速覽(9)軟體序列号生成元件SoftwareProtector介紹與使用1.基本功能介紹2.核心的SKGL源碼分析3.SKGL核心功能調用5.資源

 如果選擇了鎖定機器,就隻能在指定機器碼上的電腦用了,下面是驗證序列号的截圖:

.NET平台開源項目速覽(9)軟體序列号生成元件SoftwareProtector介紹與使用1.基本功能介紹2.核心的SKGL源碼分析3.SKGL核心功能調用5.資源

    下面來簡單看看核心的SKGL源代碼以及使用情況。

    SerialKeyConfiguration是序列号配置類,繼承自BaseConfiguration抽象配置基類。其主要作用是存儲機器碼,以及生成序列号說需要的一些特征字段。目前配置裡面預設有8個特征配置項,通過選擇不同的配置特征項,可以更加靈活生成序列号加密方案。SerialKeyConfiguration作為核心類,在序列号的生成和驗證中都有用到。

    Generate類也是繼承BaseConfiguration的類,作用是根據配置類生成說需要的序列号。裡面有密鑰的設定,以及生成序列号的核心函數doKey,裡面的邏輯也不是很複雜,主要是根據需要生成的類型,如時間限制,是否有機器碼來進行判斷,然後調用内部方法來生成序列号。

    Validate類也是繼承BaseConfiguration類,因為驗證是一個解密的逆向過程,也需要用到配置相關的項。類的主要作用是驗證序列号是否合法,是否過期等功能,也是要調用核心的内部類進行解密。總體來說思路是很簡單的,關于具體的實作過程,暫時沒必要深究,可以檢視源代碼進行詳細的了解。 

     這個元件一個是核心類,1個是非常成熟可以直接使用的UI界面,UI界面的代碼是VB.NET,很簡單。這裡我将示範幾種使用方法,來調用核心的SKGL元件來完成序列号的生成和解密功能。使用之前添加引用,建立項目這些東西就不必說了。直接進入主題吧。

    建立key使用Generate類,主要有3個重載方法,下面的例子很簡單的進行了示範,看代碼注釋即可了解。

1

2

3

4

5

6

7

8

9

10

<code>//1.建立key生成對象</code>

<code>var</code> <code>CreateAKey = </code><code>new</code> <code>Generate();</code>

<code>//2.設定密鑰</code>

<code>CreateAKey.secretPhase = </code><code>"testdemo"</code><code>;</code>

<code>//3.生成key,30天時間限制</code>

<code>var</code> <code>key1 = CreateAKey.doKey(30);</code>

<code>//4.還可以設定機器碼以及設定起始日期,機器碼是1個5位Int數</code>

<code>var</code> <code>key2 = CreateAKey.doKey(30, 61125);</code>

<code>Console.WriteLine(</code><code>"Key 1 :"</code><code>+key1);</code>

<code>Console.WriteLine(</code><code>"Key 2 :"</code><code>+key2);</code>

    結果如下,第2個key使用了本機的機器碼,我們在下面的代碼中将進行驗證:

<code>Key 1 :MFZIL-NSTBB-DLLXZ-RFHYV</code>

<code>Key 2 :JPVFS-BLQOQ-FLFTN-HXLFW</code>

    驗證key是一個逆向過程,使用Validate類,我們使用上面代碼生成的key和配置來進行驗證。代碼如下,具體看注釋:

11

12

13

14

15

16

<code>//1.建立key驗證對象</code>

<code>var</code> <code>ValidateAKey = </code><code>new</code> <code>Validate();</code>

<code>ValidateAKey.secretPhase = </code><code>"testdemo"</code><code>;</code>

<code>//3.設定要驗證的key,注意,這是上面代碼生成的key1内容</code>

<code>ValidateAKey.Key = </code><code>"MFZIL-NSTBB-DLLXZ-RFHYV"</code><code>;           </code>

<code>//4.直接驗證是否被修改</code>

<code>Console.WriteLine(</code><code>"Key 1 驗證:{0}"</code> <code>, ValidateAKey.IsValid);</code>

<code>//5.檢查key是否過期,false說明在有效期内</code>

<code>Console.WriteLine(</code><code>"Key 1 有效期:{0}"</code><code>, ValidateAKey.IsExpired);</code>

<code>//同樣驗證Key2</code>

<code>ValidateAKey.Key = </code><code>"JPVFS-BLQOQ-FLFTN-HXLFW"</code><code>;</code>

<code>//檢查密鑰是否被修改</code>

<code>Console.WriteLine(</code><code>"Key 2 驗證:{0}"</code><code>, ValidateAKey.IsValid);</code>

<code>//我電腦的實際機器碼是 61125,是以結果是不一樣的</code>

<code>Console.WriteLine(</code><code>"Key 2 是否和目前機器的機器碼一樣:{0}"</code><code>, ValidateAKey.IsOnRightMachine);</code>

結果如下:

<code>Key 1 驗證:True</code>

<code>Key 1 有效期:False</code>

<code>Key 2 驗證:True</code>

<code>Key 2 是否和目前機器的機器碼一樣:False</code>

    如上圖可以驗證密鑰是否修改,以及是否過期,以及對應的機器碼是否和本機一樣。在實際使用中,如果要鎖定機器,必須先獲得機器碼,然後生成對應的才行。

    簡單的說,設定這個屬性,可以讓你定義密鑰的使用在不同的環境或者版本中。例如應用程式釋出後,可能會有試用版,個人版,專業版等等不同版本。實際使用的時候就可以拿出其中的位來設定是否是某一個版本,或者某一個功能類型。SKGL在實際的驗證中,也會對這些特征進行驗證,進而根據序列号的類型來使用對應的功能。下面我們使用1個簡單的例子,示範如何使用這個特征碼屬性。這個屬性需要在生成或者驗證的配置對象中進行設定:

    比如8個特征碼,選擇其中1個設定是否為時間限制的試用版。如下面代碼和注釋:

<code>//配置對象</code>

<code>SerialKeyConfiguration skc = </code><code>new</code> <code>SerialKeyConfiguration(); </code>

<code>//生成key對象</code>

<code>Generate CreateAKey = </code><code>new</code> <code>Generate(skc);</code>

<code>//</code>

<code>string</code> <code>trialKey = CreateAKey.doKey(30); </code><code>//試用版30天期限</code>

<code>//建立1個有時間限制的試用版</code>

<code>skc.Features = </code><code>new</code> <code>bool</code><code>[8] { </code><code>true</code><code>, </code><code>false</code><code>, </code><code>false</code><code>, </code><code>false</code><code>,</code><code>false</code><code>, </code><code>false</code><code>,</code><code>false</code> <code>,</code><code>false</code> <code>};</code>

<code>// 當然這裡的版本可以自定義,隻要你自己認識就行了</code>

    這裡設定的位置的意義,在自己的程式中你認識就行了。

    下面是對應的一個解密後驗證功能的代碼例子:

17

18

19

20

21

22

23

<code>SerialKeyConfiguration skc = </code><code>new</code> <code>SerialKeyConfiguration();</code>

<code>//驗證對象</code>

<code>Validate ValidateAKey = </code><code>new</code> <code>Validate(skc);</code>

<code>ValidateAKey.Key = textBox4.Text; </code><code>// 對比輸入的序列号</code>

<code>{</code>

<code>    </code><code>if</code> <code>(ValidateAKey.IsValid)</code><code>//如果沒有被修改</code>

<code>    </code><code>{   </code><code>//驗證特征碼是否符合某些版本的特征</code>

<code>        </code><code>if</code> <code>(ValidateAKey.Features[0] == </code><code>false</code><code>)</code>

<code>        </code><code>{</code>

<code>            </code><code>//TODO:</code>

<code>        </code><code>}</code>

<code>        </code><code>if</code> <code>(ValidateAKey.Features[0] == </code><code>true</code><code>)</code>

<code>        </code><code>//TODO:</code>

<code>     </code><code>}</code>

<code>    </code><code>else</code>

<code>    </code><code>{</code>

<code>    </code><code>}</code>

<code>}</code>

    總的來說,這個元件基本功能都滿足了,非常值得一用。至于思路,大家可以做成網站驗證或者生成注冊碼的。自己寫一個其實也挺費勁的,在一般的軟體中是足夠了。

    源碼不複雜,在學習過程中,就順便把它給翻譯了。是以這裡奉獻我翻譯後的源代碼以及Demo,以及制作的幫助文檔。上個圖:

.NET平台開源項目速覽(9)軟體序列号生成元件SoftwareProtector介紹與使用1.基本功能介紹2.核心的SKGL源碼分析3.SKGL核心功能調用5.資源

本文轉自葉小钗 h資料之巅部落格園部落格,原文連結:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SKGL_Key_Generate.html,如需轉載請自行聯系原作者