相信很多初学编程的人都会对这个注册功能很感兴趣,我也不例外,刚学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)进行一些复杂的运算。这个需要你自己设计一个复杂的算法。你也可以把注册码写进注册表。