zoukankan      html  css  js  c++  java
  • .net(c#) 简单的软件注册功能的实现:

    主要思路:获取机器的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 + "http://www.cnblogs.com/chenbg2001/admin/file://sixi.ini/"))
                {
                    //如果注册文件不存在。注册失败
                    //创建注册文件
                    File.Create(sysFolder + "http://www.cnblogs.com/chenbg2001/admin/file://sixi.ini/");

                    MessageBox.Show("请注册!");
                    Application.Run(new RegForm());//进入注册界面。

                }
                else
                {//如果注册文件存在,读取文件内容跟密码比较
                    byte[] arry=new byte [32];
                    string str = "";
                    FileInfo fi = new FileInfo(sysFolder + "http://www.cnblogs.com/chenbg2001/admin/file://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(mailto:sysFolder+@"%20sixi.ini", rg.getMd5(rg.GetCpuID()));

                    //可以进入软件的主界面。或重新启动本程序。
                }

            }

    ////////////////////////////////////////////////////////////

    ///////////////////////OVER

    ///////////////////////////////////////////////////////////

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

  • 相关阅读:
    测试PHP-FPM的工作流中的疑惑点
    摘要
    Centrifugo简单试用
    react-redux的基本用法
    PHP中使用ElasticSearch(二)
    PHP中使用ElasticSearch(一)
    Vue中的状态管理器
    Laravel数据库迁移
    快速搭建一个vue开发环境
    使用cURL尝试ElasticSearch
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1525431.html
Copyright © 2011-2022 走看看