相信很多初學編程的人都會對這個注冊功能很感興趣,我也不例外,剛學asp.net時,競找不到這方面的實例,結果自己參考微軟的一些文檔自己做了一個,其實我做的這個注冊功能很簡單,讀取計算機的CPU序列號,用MD5加密(經過處理)生成一個機器碼,然后再把這個機器碼處理一下就生成了注冊碼,在asp.net的配置文件web.config中加了一個鍵,用於存儲注冊碼,程序運行時讀取機器碼,然后再生成注冊碼,對照一下配置文件內的注冊碼,如果一致就說明程序已注冊,否則未注冊。同時也做了一個注冊機,用於生成注冊碼。注冊機運行結果:
下面是代碼:
1、首先是讀取機器序列號的類Hardware,網上找來的

using System; using System.Runtime.InteropServices; using System.Management; namespace Hardware { /// summary /// Hardware_Mac 的摘要說明。 /// /summary public class HardwareInfo { //取機器名 public string GetHostName() { return System.Net.Dns.GetHostName(); } //取CPU編號 public String GetCpuID() { try { ManagementClass mc = new ManagementClass(Win32_Processor); ManagementObjectCollection moc = mc.GetInstances(); String strCpuID = null; foreach (ManagementObject mo in moc) { strCpuID = mo.Properties[ProcessorId].Value.ToString(); break; } return strCpuID; } catch { return ; } }//end method //取第一塊硬盤編號 public String GetHardDiskID() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher(SELECT * FROM Win32_PhysicalMedia); String strHardDiskID = null; foreach (ManagementObject mo in searcher.Get()) { strHardDiskID = mo[SerialNumber].ToString().Trim(); break; } return strHardDiskID;
主要思路:獲取機器的CPU序列號,得到機器碼。通過對機器碼進行MD5運算之后得到注冊碼。將注冊碼寫進注冊表或系統目錄。
//1.在程序的入口處(winform)檢測注冊文件是否存在,如果不存在
//則提示用戶注冊文件損壞或者用戶未注冊,如果注冊文件存在,則讀取文件內容,判斷注冊碼是否正確。
//在程序的入口函數所在的文件要引用 using System.IO;來進行文件操作。

using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace LoginWindowTest { static class Program { /// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main() { String sysFolder = System.Environment.SystemDirectory;//獲取系統安裝目錄如:c:\windows\system32 Reg rg=new Reg();//此類里有幾個函數(獲取CPU序列號,對字符串進行MD5運算等) Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); if (!File.Exists(sysFolder + "\\sixi.ini")) { //如果注冊文件不存在。注冊失敗 //創建注冊文件 File.Create(sysFolder + "\\sixi.ini"); MessageBox.Show("請注冊!"); Application.Run(new RegForm());//進入注冊界面。 } else {//如果注冊文件存在,讀取文件內容跟密碼比較 byte[] arry=new byte [32]; string str = ""; FileInfo fi = new FileInfo(sysFolder + "\\sixi.ini"); FileStream fs = fi.OpenRead(); int i=fs.Read(arry, 0, 32); fs.Close(); str = System.Text.Encoding.ASCII.GetString(arry); if (str == rg.getMd5(rg.GetCpuID()).Trim())//如果注冊文件里的字符串和經過MD5運算過的注冊碼相同,則注冊成功 { MessageBox.Show("軟件已經成功注冊!"); Application.Run(new MainForm());//進入軟件主界面 } else { MessageBox.Show("請注冊軟件!"); Application.Run(new RegForm());//進入注冊界面。 } } } } }
//2.Reg類,獲取CPU序列號、對字符串進行MD5加密等。需要引用System.Managerment
//你也可以對這個類進行優化,把驗證注冊碼也放在這個里面,可以寫一個方法,比如:Public bool ISRight()

using System; using System.Collections.Generic; using System.Text; using System.Management; namespace LoginWindowTest { class Reg { //取CPU編號 public string GetCpuID() { try { ManagementClass mc = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = mc.GetInstances(); String strCpuID = null; foreach (ManagementObject mo in moc) { strCpuID = mo.Properties["ProcessorId"].Value.ToString(); break; } return strCpuID; } catch { return ""; } }//end method //取第一塊硬盤編號,因為移動硬盤的復雜性,所以不建議加密時同時對CPUID和HDID操作,如果用戶把移動硬盤設為啟動盤,就會造成注冊碼和機器碼經過運算后不符合的錯誤。 public string GetHardDiskID() { string HDid = ""; try { ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc1 = cimobject1.GetInstances(); foreach (ManagementObject mo in moc1) { HDid = (string)mo.Properties["Model"].Value; } return HDid; } catch { return ""; } } public string getMd5(string md5) { System.Security.Cryptography.MD5CryptoServiceProvider md = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] value, hash; value = System.Text.Encoding.UTF8.GetBytes(md5); hash = md.ComputeHash(value); md.Clear(); string temp = ""; for (int i = 0, len = hash.Length; i < len; i++) { temp += hash[i].ToString("x").PadLeft(2, '0'); } return temp; } } } ////3.注冊頁面可以這樣寫: private void button3_Click(object sender, EventArgs e) { Reg rg = new Reg(); String sysFolder = System.Environment.SystemDirectory; //注冊, //1.修改app.config if (textBox2.Text.Trim() != rg.getMd5(GetCpuID())) { MessageBox.Show("注冊碼錯誤!"); } else { MessageBox.Show("注冊成功!"); File.WriteAllText(sysFolder+@"\sixi.ini", rg.getMd5(rg.GetCpuID())); //可以進入軟件的主界面。或重新啟動本程序。 } }
////////////////////////////////////////////////////////////
///////////////////////OVER
///////////////////////////////////////////////////////////
開頭的時候說了,這個只是注冊軟件的簡單的實現。如果你想更復雜一點兒,你還可以對機器碼(CPUID)進行一些復雜的運算。這個需要你自己設計一個復雜的算法。你也可以把注冊碼寫進注冊表。