.NET平臺開源專案速覽(9)軟體序列號生成元件SoftwareProtector介紹與使用
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下Software Protector序列號生成元件。今天就通過一篇簡單的文章來預覽一下其強大的功能。雖然我人為其已經基本滿足了一個軟體序列號的所有要素,但至於大家用不用得上,還得看大家的需求。總的來說,其原始碼並不複雜的,即使要增加功能,也可以使用其進行擴充套件。何苦,就我而言,雖然以前也做過簡單的序列號註冊和驗證,但看完這個之後,自己真的是太天真了。以前也簡直是弱爆了,所以某種意義上,這個元件的功能是很強大的。
1.基本功能介紹
說簡單的,這個東西就是序列號生成器,用來保護應用程式的授權的。可以生成和驗證不同型別的序列號(20位),能限制時間(最多999天),還能夠鎖定特定機器的key。這個元件是GUI介面,核心使用的是
看看介面所演示的功能截圖:
如果選擇了鎖定機器,就只能在指定機器碼上的電腦用了,下面是驗證序列號的截圖:
下面來簡單看看核心的SKGL原始碼以及使用情況。
2.核心的SKGL原始碼分析
對SKGL原始碼的分析,由於總共程式碼量很少,實際的程式碼量只有260行,所以我對這個原始碼進行了簡單的翻譯,特別是主要核心方法的功能,便於理解。後面我們將提供製作好的CHM幫助文件,供使用參考。SKGL中總共有5個類,其中比較核心的只有3個類,另外2個是抽象基類以及內部核心方法。所以主要看看3個核心類:
2.1 SerialKeyConfiguration類
SerialKeyConfiguration是序列號配置類,繼承自BaseConfiguration抽象配置基類。其主要作用是儲存機器碼,以及生成序列號說需要的一些特徵欄位。目前配置裡面預設有8個特徵配置項,通過選擇不同的配置特徵項,可以更加靈活生成序列號加密方案。SerialKeyConfiguration作為核心類,在序列號的生成和驗證中都有用到。
2.2 Generate類
Generate類也是繼承BaseConfiguration的類,作用是根據配置類生成說需要的序列號。裡面有金鑰的設定,以及生成序列號的核心函式doKey
2.3 Validate類
Validate類也是繼承BaseConfiguration類,因為驗證是一個解密的逆向過程,也需要用到配置相關的項。類的主要作用是驗證序列號是否合法,是否過期等功能,也是要呼叫核心的內部類進行解密。總體來說思路是很簡單的,關於具體的實現過程,暫時沒必要深究,可以檢視原始碼進行詳細的理解。
3.SKGL核心功能呼叫
這個元件一個是核心類,1個是非常成熟可以直接使用的UI介面,UI介面的程式碼是VB.NET,很簡單。這裡我將演示幾種使用方法,來呼叫核心的SKGL元件來完成序列號的生成和解密功能。使用之前新增引用,新建專案這些東西就不必說了。直接進入主題吧。
1.建立Key
建立key使用Generate類,主要有3個過載方法,下面的例子很簡單的進行了演示,看程式碼註釋即可理解。
//1.建立key生成物件 var CreateAKey = new Generate(); //2.設定金鑰 CreateAKey.secretPhase = "testdemo"; //3.生成key,30天時間限制 var key1 = CreateAKey.doKey(30); //4.還可以設定機器碼以及設定起始日期,機器碼是1個5位Int數 var key2 = CreateAKey.doKey(30, 61125); Console.WriteLine("Key 1 :"+key1); Console.WriteLine("Key 2 :"+key2);
結果如下,第2個key使用了本機的機器碼,我們在下面的程式碼中將進行驗證:
Key 1 :MFZIL-NSTBB-DLLXZ-RFHYV Key 2 :JPVFS-BLQOQ-FLFTN-HXLFW
2.驗證Key
驗證key是一個逆向過程,使用Validate類,我們使用上面程式碼生成的key和配置來進行驗證。程式碼如下,具體看註釋:
//1.建立key驗證物件 var ValidateAKey = new Validate(); //2.設定金鑰 ValidateAKey.secretPhase = "testdemo"; //3.設定要驗證的key,注意,這是上面程式碼生成的key1內容 ValidateAKey.Key = "MFZIL-NSTBB-DLLXZ-RFHYV"; //4.直接驗證是否被修改 Console.WriteLine("Key 1 驗證:{0}" , ValidateAKey.IsValid); //5.檢查key是否過期,false說明在有效期內 Console.WriteLine("Key 1 有效期:{0}", ValidateAKey.IsExpired); //同樣驗證Key2 ValidateAKey.Key = "JPVFS-BLQOQ-FLFTN-HXLFW"; //檢查金鑰是否被修改 Console.WriteLine("Key 2 驗證:{0}", ValidateAKey.IsValid); //我電腦的實際機器碼是 61125,所以結果是不一樣的 Console.WriteLine("Key 2 是否和當前機器的機器碼一樣:{0}", ValidateAKey.IsOnRightMachine);
結果如下:
Key 1 驗證:True Key 1 有效期:False Key 2 驗證:True Key 2 是否和當前機器的機器碼一樣:False
如上圖可以驗證金鑰是否修改,以及是否過期,以及對應的機器碼是否和本機一樣。在實際使用中,如果要鎖定機器,必須先獲得機器碼,然後生成對應的才行。
3.高階應用之特徵值
在原始碼以及上面的解說中,我們提到了,在SKGL中,有一個特徵碼屬性:Features,是1個長度為8的布林陣列。它有什麼作用呢?
簡單的說,設定這個屬性,可以讓你定義金鑰的使用在不同的環境或者版本中。例如應用程式釋出後,可能會有試用版,個人版,專業版等等不同版本。實際使用的時候就可以拿出其中的位來設定是否是某一個版本,或者某一個功能型別。SKGL在實際的驗證中,也會對這些特徵進行驗證,從而根據序列號的型別來使用對應的功能。下面我們使用1個簡單的例子,演示如何使用這個特徵碼屬性。這個屬性需要在生成或者驗證的配置物件中進行設定:
3.1 配置生成對應版本的Key
比如8個特徵碼,選擇其中1個設定是否為時間限制的試用版。如下面程式碼和註釋:
//配置物件 SerialKeyConfiguration skc = new SerialKeyConfiguration(); //生成key物件 Generate CreateAKey = new Generate(skc); // string trialKey = CreateAKey.doKey(30); //試用版30天期限 //建立1個有時間限制的試用版 skc.Features = new bool[8] { true, false, false, false,false, false,false ,false }; // 當然這裡的版本可以自定義,只要你自己認識就行了
這裡設定的位置的意義,在自己的程式中你認識就行了。
3.2 解密獲取Key的特徵功能
下面是對應的一個解密後驗證功能的程式碼例子:
//配置物件 SerialKeyConfiguration skc = new SerialKeyConfiguration(); //驗證物件 Validate ValidateAKey = new Validate(skc); ValidateAKey.Key = textBox4.Text; // 對比輸入的序列號 { if (ValidateAKey.IsValid)//如果沒有被修改 { //驗證特徵碼是否符合某些版本的特徵 if (ValidateAKey.Features[0] == false) { //TODO: } if (ValidateAKey.Features[0] == true) { //TODO: } //TODO: } else { //TODO: } }
總的來說,這個元件基本功能都滿足了,非常值得一用。至於思路,大家可以做成網站驗證或者生成註冊碼的。自己寫一個其實也挺費勁的,在一般的軟體中是足夠了。
5.資源
原始碼不復雜,在學習過程中,就順便把它給翻譯了。所以這裡奉獻我翻譯後的原始碼以及Demo,以及製作的幫助文件。上個圖:
相關推薦
.NET平臺開源專案速覽(9)軟體序列號生成元件SoftwareProtector介紹與使用
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下Software Protector序列號生成元件。今天就通過一篇簡單的文章來預覽一下其強大的功能。雖然我人為其已經基本滿足了一個軟體序列號的所有要素,但至於大家用不用得上,還得看大家的需求。總的來
.NET平臺開源專案速覽-最快的物件對映元件Tiny Mapper之專案實踐
心情小札:近期換了工作,苦逼於22:00後下班,房間一篇狼藉~ 小翠鄙視到:"你就適合生活在垃圾堆中!!!" 看評論也是挺有價值,同時也看到許多新手同學問道在實際專案中使用的情況。 下面就原作者的程式碼的基礎上略作調整,闡述一下在實際專案場景中的使用: 第一步:瞭解類庫方法:TinyMapper 主
.NET平臺開源專案速覽(8)Expression Evaluator表示式計算元件使用
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下Expression Evaluator驗證元件。那裡只是概述了一下,並沒有對其使用和強大功能做深入研究,所以今天就通過一篇簡單的文章來預覽一下其強大的功能。本文曾在【原創】.NET開源表示式計算元
.NET平臺開源專案速覽(14)最快的物件對映元件Tiny Mapper
好久沒有寫文章,工作甚忙,但每日還是關注.NET領域的開源專案。五一休息,放鬆了一下之後,今天就給大家介紹一個輕量級的物件對映工具Tiny Mapper:號稱是.NET平臺最快的物件對映元件。那就一起看看呢。 臨時更新:感謝@ 的意見,為了避免新手誤解,這裡說明一下,Tiny Mappe
.NET平臺開源專案速覽(20)Newlife.Core中簡單靈活的配置檔案
如果用知乎,可以關注專欄: 記得5年前開始拼命翻讀X元件的原始碼,特別是XCode,但對Newlife.Core 的東西瞭解很少,最多隻是會用用,而且用到的只是九牛一毛。裡面好用的東西太多了。 最近一年時間,零零散散又學了很多,也瞭解了很多,不會寫那總要學會用吧,今天就給大家介紹裡面非常好用的自定義配置檔
.NET平臺開源專案速覽(19)Power BI神器DAX Studio
PowerBI更新頻繁,已經有點更不上的節奏,一直在關注和學習中,基本的一些操作大概是沒問題,更重要的是注重Power Query,M函式,以及DAX的使用,這才是核心。 上個月研究了DAX的一些語法和公式,發現這玩意看起來簡單,但其實功能非常強大,所以就想和寫程式碼一樣,弄個工具試一下。
.NET平臺開源專案速覽(21)Cron任務排程CronNET
Quartznet大名鼎鼎應該很少有人不知道,相關的開源專案很多,不過那東東對新手來說,有點晦澀,加上哪個Cron表示式,可能一進去雲裡霧裡的。今天給大家介紹一個簡單的在.NET平臺上執行Cron計劃任務的元件CronNET。同時也給大家推介幾個Cron表示式的工具。 1.Cron介紹和工具
.NET平臺開源專案速覽(7)關於NoSQL資料庫LiteDB的分頁查詢解決過程
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯) 與 .NET平臺開源專案速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB中,介紹了LiteDB的基本使用情況以及部分技術細節,我還沒有在實際系統中大量使用,但文章釋出後,有不少網友( )反應在實際專案中使用過,效果還
.NET平臺開源專案速覽(11)KwCombinatorics排列組合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重點介紹了KwCombinatorics元件的使用情況,其實這個元件我5年前就開始用了,非常方便,麻雀雖小五臟俱全。所以一直非常喜歡,才寫了幾篇文章推薦給大家。最近在計算足球彩票結果組合過程中,使用的到了其功能,生成排列,非常具有代表性,而且也
.NET平臺開源專案速覽(1)SharpConfig配置檔案讀寫元件
在.NET平臺日常開發中,讀取配置檔案是一個很常見的需求。以前都是使用System.Configuration.ConfigurationSettings來操作,這個說實話,搞起來比較費勁。不知道大家有沒有同感。所以更多時候我還是喜歡使用開源的東西,更加方便簡潔,也穩定。省去自己的麻煩。今天就介紹一個非常精緻
.NET平臺開源專案速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB
今天給大家介紹一個不錯的小巧輕量級的NoSQL檔案資料庫LiteDB。本部落格在2013年也介紹過2款.NET平臺的開源資料庫: 上面2個數據庫我的實際的專案中用過,還不錯。當然資料量很小,主要是客戶比較變態,必須要用xml檔案儲存,就想到了,另外NDatabase只是自己覺得好玩,
.NET平臺開源專案速覽(10)FluentValidation驗證元件深入使用(二)
在上一篇文章:.NET平臺開源專案速覽(6)FluentValidation驗證元件介紹與入門(一) 中,給大家初步介紹了一下FluentValidation驗證元件的使用情況。文章從構建間的驗證器開始,到最後的結果,以及複雜驗證等都做了比較深入的講解和使用。但其實一個完整的元件是麻雀雖小五臟俱全
.NET平臺開源專案速覽(2)Compare .NET Objects物件比較元件
.NET平臺開源專案速覽今天介紹一款小巧強大的物件比較元件。可以更詳細的獲取2個物件的差別,並記錄具體差別,比較過程和要求可以靈活配置。 1.Compare .NET Objects介紹 Compare .NET Objects元件是.NET平臺用於深入比較2個.NET物件的開源元
.NET平臺開源專案速覽(13)機器學習元件Accord.NET框架功能介紹
Accord.NET Framework是在AForge.NET專案的基礎上封裝和進一步開發而來。因為AForge.NET更注重與一些底層和廣度,而Accord.NET Framework更注重與機器學習演算法以及提供計算機視訊、音訊、訊號處理以及統計應用相關的解決方案。該專案使用C#語言編寫,專
.NET平臺開源專案速覽(5)深入使用與擴充套件SharpConfig元件
上個月在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧 和 .NET平臺開源專案速覽(1)SharpConfig配置檔案讀寫元件 中都提到了SharpConfig元件,簡單輕量級,速度快,而且還有比較深入的使用介紹。在文章釋出後,也有網友提到一些問題,當時我也沒仔細去分析,在這次我親
.NET平臺開源專案速覽(4).NET文件生成工具ADB及使用
很久以前就使用ADB這個工具來生成專案的幫助文件。功能強大,在學習一些開源專案的過程中,官方沒有提供CHM幫助文件,所以為了快速的瞭解專案結構和註釋。就生成文件來自己看,非常好用。這也是一個學習方法吧。例如本文在: 上述2篇文章中最後的資源中就手動製作了CHM幫助文件。有時候我們還可
.NET平臺開源專案速覽(6)FluentValidation驗證元件介紹與入門(一)
在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯)中,給大家初步介紹了一下FluentValidation驗證元件。那裡只是概述了一下,並沒有對其使用和強大功能做深入研究,所以今天以及接下去的幾篇文章就專門介紹這個元件。不僅僅是它小,輕量級,優雅,而且一直在持續更新中
.NET平臺開源專案速覽(12)雜湊演算法集合類庫HashLib
.NET的System.Security.Cryptography名稱空間本身是提供加密服務,雜湊函式,對稱與非對稱加密演算法等功能。實際上,大部分情況下已經滿足了需求,而且.NET實現的都是目前國際上比較權威的,標準化的演算法,所以還是安全可靠的。但也有一些場合,需要自己實現一些安全雜湊演算法。
.NET平臺開源專案速覽(18)C#平臺JSON實體類生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析複雜字串,json一定要用JsonMapper麼?中介紹了簡單的JSON解析的問題,那種方法在當時的環境是非常方便的,因為不需要生成實體類,結構很容易解析。但隨著業務的變化,也會碰到超級變態的JSON,如果還按照以前的思路,會把人搞抽風掉,一旦結構變化,又要重來。所
.NET平臺開源專案速覽(16)C#寫PDF檔案類庫PDF File Writer介紹
1年前,我在文章:這些.NET開源專案你知道嗎?.NET平臺開源文件與報表處理元件集合(三)中(第9個專案),給大家推薦了一個開源免費的PDF讀寫元件 PDFSharp,PDFSharp我2年前就看過,用過簡單的例子,不過程式碼沒有寫成專門的文章。最近在查詢資料的時候,又發現一款小巧的寫PDF檔案