.net(c#) 简单的软件注册功能的实现:
2009-07-17 10:58
886 查看
主要思路:获取机器的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)进行一些复杂的运算。这个需要你自己设计一个复杂的算法。你也可以把注册码写进注册表。
//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)进行一些复杂的运算。这个需要你自己设计一个复杂的算法。你也可以把注册码写进注册表。
相关文章推荐
- .net(c#) 简单的软件注册功能的实现:
- .net 软件注册功能的简单实现
- C# 简单软件有效期注册的实现【原】
- 基于python脚本实现软件的注册功能(机器码+注册码机制)
- .NET开发实现类似Web Parts功能,超简单实现
- 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通
- (转)用C#实现实现简单的 Ping 的功能,用于测试网络是否已经连通
- javaweb简单的登录注册功能实现
- C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现
- C#窗体简单实现登陆及学生管理功能
- 用springmvc实现简单的注册、登录功能
- 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通
- js 模拟实现类似c#下的hashtable的简单功能代码
- C#实现的简单随机数产生器功能示例
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现
- jsp+servlet+ajax+oracle数据库-实现简单的登陆、注册、找回密码功能(与Oralce数据库连接)
- C#摄像头实现拍照功能的简单代码示例
- Android SharedPreferences应用 实现本地注册登陆 功能简单易懂(实例)
- C#实现简单的计算器功能完整实例