C# 實現軟件注冊功能


相信很多初學編程的人都會對這個注冊功能很感興趣,我也不例外,剛學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;
View Code

主要思路:獲取機器的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());//進入注冊界面。
}

}

}
}
}
View Code

 

//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()));
//可以進入軟件的主界面。或重新啟動本程序。
}
}
View Code

 

////////////////////////////////////////////////////////////
///////////////////////OVER
///////////////////////////////////////////////////////////
開頭的時候說了,這個只是注冊軟件的簡單的實現。如果你想更復雜一點兒,你還可以對機器碼(CPUID)進行一些復雜的運算。這個需要你自己設計一個復雜的算法。你也可以把注冊碼寫進注冊表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM