c端 license注册
加密解密类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Common
{
/// <summary>
/// DES 加密解密
/// </summary>
public class DESHelper
{
/// <summary>
/// DES加密
/// </summary>
/// <param name="data">加密数据</param>
/// <param name="key">8位字符的密钥字符串</param>
/// <param name="iv">8位字符的初始化向量字符串</param>
/// <returns></returns>
public static string DESEncrypt(string data, string key, string iv)
{
try
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey.Take(8).ToArray(), byIV.Skip(1).Take(8).ToArray()), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
byte[] msBuffer = ms.GetBuffer();
Random r = new Random();
byte countByte =(byte)r.Next(0, 20);
for(int j= (int)ms.Length;j<128;j++)
{
msBuffer[j] = countByte++;
}
return Convert.ToBase64String(msBuffer, 0,128);
// return Convert.ToBase64String(ms.GetBuffer(),0, (int)ms.Length);
}
catch (Exception ex)
{
return "";
}
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="data">解密数据</param>
/// <param name="key">8位字符的密钥字符串(需要和加密时相同)</param>
/// <param name="iv">8位字符的初始化向量字符串(需要和加密时相同)</param>
/// <returns></returns>
public static string DESDecrypt(string data, string key, string iv)
{
try
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
byte[] byEnc=new byte[24];
byte[] byEncBackup;
try
{
byEncBackup = Convert.FromBase64String(data);
for(int i=0;i<24;i++)
{
byEnc[i] = byEncBackup[i];
}
}
catch
{
return null;
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey.Take(8).ToArray(), byIV.Skip(1).Take(8).ToArray()), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
catch (Exception ex)
{
return "";
}
}
}
}
加密解密页面以及代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TransManage
{
public partial class authorization : Form
{
public authorization()
{
InitializeComponent();
string str = Guid.NewGuid().ToString();
//string mm = Common.DESHelper.DESEncrypt(mac, mac, mac);
//string mw = Common.DESHelper.DESDecrypt(mm, mac, mac);
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowser = new FolderBrowserDialog();
folderBrowser.Description = "请选择所在的目录";
folderBrowser.ShowNewFolderButton = true;
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
string path = folderBrowser.SelectedPath;
string mac = textBox1.Text.Trim().Replace("-",":");
//ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
//ManagementObjectCollection moc = mc.GetInstances();
//foreach (ManagementObject mo in moc)
//{
// if ((bool)mo["IPEnabled"])
// {
// mac = mo["MacAddress"].ToString();
// }
//}
string mm = Common.DESHelper.DESEncrypt(mac, mac, mac);
//if (!File.Exists(path + "//license.lic"))
//{
// File.Create(path + "//license.lic");
//}
File.WriteAllText(path+"//license.lic", mm);
}
}
private void button2_Click(object sender, EventArgs e)
{
//选择文件
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = true;//该值确定是否可以选择多个文件
dialog.Title = "请选择文件夹";
dialog.Filter = "所有文件(*.*)|*.*";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string file = dialog.FileName;
string text = File.ReadAllText(file);
textBox2.Text = text;
}
}
}
}
程序启动检测license文件是否合理
#region 验证是否允许注册
if (!File.Exists("license.lic"))
{
File.Create("license.lic");
}
string str = File.ReadAllText("license.lic");
string mac = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
mac = mo["MacAddress"].ToString();
}
}
// string aa=Common.DESHelper.DESEncrypt(mac,mac,mac); ceshi 加密后
string deMac = Common.DESHelper.DESDecrypt(str, mac, mac);
if (deMac != mac)
{
MessageBox.Show("软件注册失败");
return;
}
#endregion
注意事项
1.license文件需要在debug文件根目录下
2.每一个mac地址的pc 都会有自己的license唯一的文件