C#软件注册和认证
Posted 啥也不想,只想搞钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#软件注册和认证相关的知识,希望对你有一定的参考价值。
1 题目描述
(1)软件注册管理程序:获取CPU、硬盘、网卡等硬件信息生成机器码,加密(MD5)最后生成注册码保存在一个二进制的license文件中。
(2)软件注册认证程序:获取CPU、硬盘、网卡等硬件信息生成机器码,与本机器中软件的license文件的内容比对,成功返回true,不成功返回false。
2 源码详解
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Security.Cryptography;
using System.IO;
namespace Csharp11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void CPUNumber_Click(object sender, EventArgs e)
{
}
public static string MD5(string encryptString)
{
byte[] result = Encoding.Default.GetBytes(encryptString);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
string encryptResult = BitConverter.ToString(output).Replace("-", "");
return encryptResult;
}
private void GenerateRegistrationCode_Click(object sender, EventArgs e)
{
CPUNumberText.Text = null;
DiskSequenceNumberText.Text = null;
MACAddressText.Text = null;
MachineCodeText.Text = null;
lRegistrationCodeText.Text = null;
/// 获得CPU的序列号
String strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
foreach (ManagementObject myObject in myCpuConnection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString();
break;
}
CPUNumberText.Text = strCpu;
///获取硬盘序列号
//创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String strHardDiskID = null;//存储磁盘序列号
//调用ManagementObjectSearcher类的Get方法取得硬盘序列号
foreach (ManagementObject mo in searcher.Get())
{
strHardDiskID = mo["SerialNumber"].ToString().Trim();//记录获得的磁盘序列号
break;
}
DiskSequenceNumberText.Text = strHardDiskID;
///获取网卡硬件地址
String strMac = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
strMac = mo["MacAddress"].ToString();
break;
}
}
MACAddressText.Text = strMac;
///生成机器码
string strNum = strCpu + strHardDiskID + strMac; //获得24位Cpu和硬盘序列号
strNum = strNum.Replace(":", "");
MachineCodeText.Text = strNum;
///MD5加密
byte[] result = Encoding.Default.GetBytes(strNum.Trim());
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
String logNum = BitConverter.ToString(output).Replace("-", "");
lRegistrationCodeText.Text = logNum;
///license 保存
FileStream fs = new FileStream(@"licence.lic", FileMode.Create);
BinaryWriter binWriter = new BinaryWriter(fs);
binWriter.Write(logNum.ToCharArray(), 0, logNum.Length);
binWriter.Close();
fs.Close();
}
private void RegistrationCodeAuthentication_Click(object sender, EventArgs e)
{
AfterCPUNumberText.Text = null;
AfterDiskSequenceNumberText.Text = null;
AfterMACAddressText.Text = null;
AfterMachineCodeText.Text = null;
AfterlRegistrationCodeText.Text = null;
/// 获得CPU的序列号
String strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
foreach (ManagementObject myObject in myCpuConnection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString();
break;
}
AfterCPUNumberText.Text = strCpu;
///获取硬盘序列号
//创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String strHardDiskID = null;//存储磁盘序列号
//调用ManagementObjectSearcher类的Get方法取得硬盘序列号
foreach (ManagementObject mo in searcher.Get())
{
strHardDiskID = mo["SerialNumber"].ToString().Trim();//记录获得的磁盘序列号
break;
}
AfterDiskSequenceNumberText.Text = strHardDiskID;
///获取网卡硬件地址
String strMac = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
strMac = mo["MacAddress"].ToString();
break;
}
}
AfterMACAddressText.Text = strMac;
///生成机器码
string strNum = strCpu + strHardDiskID + strMac; //获得24位Cpu和硬盘序列号
strNum = strNum.Replace(":", "");
AfterMachineCodeText.Text = strNum;
///MD5加密
byte[] result = Encoding.Default.GetBytes(strNum.Trim());
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
String logNum = BitConverter.ToString(output).Replace("-", "");
AfterlRegistrationCodeText.Text = logNum;
///license 保存
byte[] tempSpace;
FileStream fs = new FileStream(@"licence.lic", FileMode.Open);
BinaryReader binReader = new BinaryReader(fs);
tempSpace = new byte[fs.Length];
binReader.Read(tempSpace, 0, (int)fs.Length);
binReader.Close();
fs.Close();
String s = Encoding.UTF8.GetString(tempSpace);
if (s.Equals(logNum))
{
MessageBox.Show("认证成功!", "TRUE", MessageBoxButtons.OKCancel, MessageBoxIcon.None);
}
else
{
MessageBox.Show("认证失败!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}
}
}
3 实现效果
以上是关于C#软件注册和认证的主要内容,如果未能解决你的问题,请参考以下文章