.net(c#) 簡單的軟體註冊功能的實現:

來源:互聯網
上載者:User

主要思路:擷取機器的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)進行一些複雜的運算。這個需要你自己設計一個複雜的演算法。你也可以把註冊碼寫進註冊表。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.