.net(c#) 简单的软件注册功能的实现

主要思路:获取机器的CPU序列号,得到机器码。通过对机器码进行MD5运算之后得到注册码。将注册码写进注册表或系统目录。
//1.在程序的入口处(winform)检测注册文件是否存在,如果不存在
//则提示用户注册文件损坏或者用户未注册,如果注册文件存在,则读取文件内容,判断注册码是否正确。
//在程序的入口函数所在的文件要引用 using System.IO;来进行文件操作。
 

 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Windows.Forms;  
  4. using System.IO;  
  5. namespace LoginWindowTest  
  6. {  
  7.     static class Program  
  8.     {  
  9.         /// <summary>  
  10.         /// 应用程序的主入口点。  
  11.         /// </summary>  
  12.         [STAThread]  
  13.         static void Main()  
  14.         {  
  15.             String sysFolder = System.Environment.SystemDirectory;//获取系统安装目录如:c:\windows\system32  
  16.             Reg rg=new Reg();//此类里有几个函数(获取CPU序列号,对字符串进行MD5运算等)  
  17.             Application.EnableVisualStyles();  
  18.             Application.SetCompatibleTextRenderingDefault(false);  
  19.             if (!File.Exists(sysFolder + "file://sixi.ini/"))  
  20.             {  
  21.                 //如果注册文件不存在。注册失败  
  22.                 //创建注册文件  
  23.                 File.Create(sysFolder + "file://sixi.ini/");  
  24.                 MessageBox.Show("请注册!");  
  25.                 Application.Run(new RegForm());//进入注册界面。  
  26.             }  
  27.             else 
  28.             {//如果注册文件存在,读取文件内容跟密码比较  
  29.                 byte[] arry=new byte [32];  
  30.                 string str = "";  
  31.                 FileInfo fi = new FileInfo(sysFolder + "file://sixi.ini/");  
  32.                 FileStream fs = fi.OpenRead();  
  33.                 int i=fs.Read(arry, 0, 32);  
  34.                 fs.Close();  
  35.                 str = System.Text.Encoding.ASCII.GetString(arry);  
  36.                 if (str == rg.getMd5(rg.GetCpuID()).Trim())//如果注册文件里的字符串和经过MD5运算过的注册码相同,则注册成功  
  37.                 {  
  38.                     MessageBox.Show("软件已经成功注册!");  
  39.                        Application.Run(new MainForm());//进入软件主界面  
  40.                 }  
  41.                 else 
  42.                 {  
  43.                     MessageBox.Show("请注册软件!");  
  44.                        Application.Run(new RegForm());//进入注册界面。  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49. }  
  50.  //2.Reg类,获取CPU序列号、对字符串进行MD5加密等。需要引用System.Managerment
    //你也可以对这个类进行优化,把验证注册码也放在这个里面,可以写一个方法,比如:Public bool ISRight()
     

        
        
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Text;  
    4. using System.Management;  
    5. namespace LoginWindowTest  
    6. {  
    7.     class Reg  
    8.     {  
    9.         //取CPU编号  
    10.         public string GetCpuID()  
    11.         {  
    12.             try 
    13.             {  
    14.                 ManagementClass mc = new ManagementClass("Win32_Processor");  
    15.                 ManagementObjectCollection moc = mc.GetInstances();  
    16.                 String strCpuID = null;  
    17.                 foreach (ManagementObject mo in moc)  
    18.                 {  
    19.                     strCpuID = mo.Properties["ProcessorId"].Value.ToString();  
    20.                     break;  
    21.                 }  
    22.                 return strCpuID;  
    23.             }  
    24.             catch 
    25.             {  
    26.                 return "";  
    27.             }  
    28.         }//end method  
    29.         //取第一块硬盘编号,因为移动硬盘的复杂性,所以不建议加密时同时对CPUID和HDID操作,如果用户把移动硬盘设为启动盘,就会造成注册码和机器码经过运算后不符合的错误。  
    30.         public string GetHardDiskID()  
    31.         {  
    32.             string HDid = "";  
    33.             try 
    34.             {  
    35.                 ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");  
    36.                 ManagementObjectCollection moc1 = cimobject1.GetInstances();  
    37.                 foreach (ManagementObject mo in moc1)  
    38.                 {  
    39.                     HDid = (string)mo.Properties["Model"].Value;  
    40.                 }  
    41.                 return HDid;  
    42.             }  
    43.             catch 
    44.             {  
    45.                 return "";  
    46.             }  
    47.         }  
    48. public string getaa()
    49. {
    50. string aa = ""; 
    51. ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    52. ManagementObjectCollection moc2 = mc.GetInstances();
    53. foreach (ManagementObject mo in moc2)
    54. {
    55.  if ((bool)mo["IPEnabled"] == true)
    56. aa = mo["MacAddress"].ToString();  
    57. mo.Dispose();
    58. }
    59. return aa;
    60. }
    61.         public string getMd5(string md5)  
    62.         {  
    63.             System.Security.Cryptography.MD5CryptoServiceProvider md = new System.Security.Cryptography.MD5CryptoServiceProvider();  
    64.             byte[] value, hash;  
    65.             value = System.Text.Encoding.UTF8.GetBytes(md5);  
    66.             hash = md.ComputeHash(value);  
    67.             md.Clear();  
    68.             string temp = "";  
    69.             for (int i = 0, len = hash.Length; i < len; i++)  
    70.             {  
    71.                 temp += hash[i].ToString("x").PadLeft(2, '0');  
    72.             }  
    73.             return temp;  
    74.         }  
    75.     }  
    76. }  
    3.注册页面可以这样写:
     

        
        
    1. private void button3_Click(object sender, EventArgs e)  
    2.         {  
    3.             Reg rg = new Reg();  
    4.             String sysFolder = System.Environment.SystemDirectory;  
    5.             //注册,  
    6.             //1.修改app.config  
    7.             if (textBox2.Text.Trim() != rg.getMd5(GetCpuID()))  
    8.             {  
    9.                 MessageBox.Show("注册码错误!");  
    10.             }  
    11.             else 
    12.             {  
    13.                 MessageBox.Show("注册成功!");  
    14.                 File.WriteAllText(mailto:sysFolder+@"%20sixi.ini", rg.getMd5(rg.GetCpuID()));  
    15.                 //可以进入软件的主界面。或重新启动本程序。  
    16.             }  
    17.         } 


    开头的时候说了,这个只是注册软件的简单的实现。如果你想更复杂一点儿,你还可以对机器码(CPUID)进行一些复杂的运算。这个需要你自己设计一个复杂的算法。你也可以把注册码写进注册表。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值