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唯一的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值