本文介绍了基于 本机特征信息(如CPU、主板、BIOS和MAC等) 的软件加密、授权与注册方法,并分享了 示例程序完整源代码


目录

  • 1 加密、授权与注册
  • 2 本机特征信息
  • 3 加密与解密算法
  • 4 软件授权检测
  • 5 示例程序
    • 5.1 界面设计
    • 5.2 模块代码
    • 5.3 完整代码下载

1 加密、授权与注册

  软件的加密、授权与注册流程如下:

2 本机特征信息

  本机特征信息主要包括:①CPU信息、②主板序列号、③BIOS信息、④MAC地址,基于C#获取代码如下:

using System;
using System.Management;
using System.Net.NetworkInformation;
using Microsoft.Win32;namespace RWRegister
{public class Computer{public static string ComputerInfo(){string info = string.Empty;string cpu = GetCPUInfo();string baseBoard = GetBaseBoardInfo();string bios = GetBIOSInfo();string mac = GetMACInfo();info = string.Concat(cpu, baseBoard, bios, mac);return info;}private static string GetCPUInfo(){string info = string.Empty;info = GetHardWareInfo("Win32_Processor", "ProcessorId");return info;}private static string GetBaseBoardInfo(){string info = string.Empty;info = GetHardWareInfo("Win32_BaseBoard", "SerialNumber");return info;}private static string GetBIOSInfo(){string info = string.Empty;info = GetHardWareInfo("Win32_BIOS", "SerialNumber");return info;}private static string GetMACInfo(){string info = string.Empty;info = GetMacAddressByNetwork();return info;}private static string GetHardWareInfo(string typePath, string Key){try{ManagementClass mageClass = new ManagementClass(typePath);ManagementObjectCollection mageObjectColl = mageClass.GetInstances();PropertyDataCollection Properties = mageClass.Properties;foreach (PropertyData property in Properties){if (property.Name == Key){foreach (ManagementObject mageObject in mageObjectColl){return mageObject.Properties[property.Name].Value.ToString();}}}}catch (Exception ex){throw new Exception(ex.Message);}return string.Empty;}private static string GetMacAddressByNetwork(){string Key = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\";string macAddress = string.Empty;try{NetworkInterface[] Nics = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in Nics){if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && adapter.GetPhysicalAddress().ToString().Length != 0){string fRegistryKey = Key + adapter.Id + "\\Connection";RegistryKey rKey = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);if (rKey != null){string fPnpInstanceID = rKey.GetValue("PnpInstanceID", "").ToString();int fMediaSubType = Convert.ToInt32(rKey.GetValue("MediaSubType", 0));if (fPnpInstanceID.Length > 3 && fPnpInstanceID.Substring(0, 3) == "PCI"){macAddress = adapter.GetPhysicalAddress().ToString();for (int i = 1; i < 6; i++){macAddress = macAddress.Insert(3 * i - 1, ":");}break;}}}}}catch (Exception ex){throw new Exception(ex.Message);}return macAddress;}}
}

3 加密与解密算法

  加密方法包括:①秘钥加密(KeyA+keyB)、②MD5加密。基于C#的加密与解密算法如下:

using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;namespace RWRegister
{public enum CryptoKey{KeyA, KeyB}public class Encryption{private string KeyA = "Sgg***";private string KeyB = "Qing***";private string MD5strBegin = "C++***";private string MD5strEnd = "Matlab***";private string ExecuteKey = string.Empty;public Encryption(){InitKey();//KeyA}public Encryption(CryptoKey Key){InitKey(Key);//Custom}private void InitKey(CryptoKey Key = CryptoKey.KeyA){switch (Key){case CryptoKey.KeyA:ExecuteKey = KeyA;break;case CryptoKey.KeyB:ExecuteKey = KeyB;break;}}public string EncryptOfKey(string str){return Encrypt(str, ExecuteKey);}public string DecryptOfKey(string str){return Decrypt(str, ExecuteKey);}public string EncryptOfMD5(string str){str = string.Concat(MD5strBegin, str, MD5strEnd);//trimMD5 md5 = new MD5CryptoServiceProvider();byte[] fromdata = Encoding.Unicode.GetBytes(str);byte[] todata = md5.ComputeHash(fromdata);string MD5str = string.Empty;foreach (var data in todata){MD5str += data.ToString("x2");}return MD5str;}private string Encrypt(string str, string sKey){DESCryptoServiceProvider DESCsp = new DESCryptoServiceProvider();byte[] InputBytes = Encoding.Default.GetBytes(str);DESCsp.Key = ASCIIEncoding.ASCII.GetBytes(sKey);DESCsp.IV = ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, DESCsp.CreateEncryptor(), CryptoStreamMode.Write);cs.Write(InputBytes, 0, InputBytes.Length);cs.FlushFinalBlock();StringBuilder builder = new StringBuilder();foreach (byte b in ms.ToArray()){builder.AppendFormat("{0:X2}", b);}builder.ToString();return builder.ToString();}private string Decrypt(string pToDecrypt, string sKey){DESCryptoServiceProvider DESCsp = new DESCryptoServiceProvider();byte[] InputBytes = new byte[pToDecrypt.Length / 2];for (int x = 0; x < pToDecrypt.Length / 2; x++){int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));InputBytes[x] = (byte)i;}DESCsp.Key = ASCIIEncoding.ASCII.GetBytes(sKey);DESCsp.IV = ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, DESCsp.CreateDecryptor(), CryptoStreamMode.Write);cs.Write(InputBytes, 0, InputBytes.Length);cs.FlushFinalBlock();return Encoding.Default.GetString(ms.ToArray());}}
}

4 软件授权检测

  软件授权检测代码如下:

using System;
using System.Collections.Generic;
using System.IO;namespace RWRegister
{public class Register{public static string CryptographFile = "Cryptograph.Key";public static string LicenseFile = "license.Key";public static void WriteCryptographFile(string info){WriteFile(info, CryptographFile);}public static void WriteLicenseFile(string info){WriteFile(info, LicenseFile);}public static string ReadCryptographFile(){return ReadFile(CryptographFile);}public static string ReadLicenseFile(){return ReadFile(LicenseFile);}public static bool ExistCryptographFile(){return File.Exists(CryptographFile);}public static bool ExistLicenseFile(){return File.Exists(LicenseFile);}private static void WriteFile(string info, string fileName){try{using (StreamWriter writer = new StreamWriter(fileName, false)){writer.Write(info);writer.Close();}}catch (Exception ex){throw new Exception(ex.Message);}}private static string ReadFile(string fileName){string info = string.Empty;try{using (StreamReader reader = new StreamReader(fileName)){info = reader.ReadToEnd();reader.Close();}}catch (Exception ex){throw new Exception(ex.Message);}return info;}public static bool CheckRegister(){//MD5 Cryptograph of Computer informationstring CryptoInfo = Computer.ComputerInfo();Encryption encryptor = new Encryption(CryptoKey.KeyA);CryptoInfo = encryptor.EncryptOfKey(CryptoInfo);//KeyAstring MD5CryptoInfo = encryptor.EncryptOfMD5(CryptoInfo);//MD5//judge the exist of Cryptograph fileif (!ExistCryptographFile() || CryptoInfo != ReadCryptographFile()){WriteCryptographFile(CryptoInfo);}//judge the exist of License fileif (!ExistLicenseFile()){return false;}//MD5 Cryptograph of License filestring MD5License = ReadLicenseFile();encryptor = new Encryption(CryptoKey.KeyB);MD5License = encryptor.DecryptOfKey(MD5License);//KeyBif (MD5License == MD5CryptoInfo)//two md5 clash{return true;}else{return false;}}}
}

5 示例程序

5.1 界面设计

  示例程序界面设计如下图,包括:① “文件(F)” 菜单(包含“数据”、“退出”子菜单);② “帮助(H)” 菜单(包含“帮助文档”、“软件注册”子菜单)。软件开启时,将自动检测授权情况,若未授权仅有20秒的试用时间(20秒后将禁用软件);若软件未授权,可按 “帮助”->“软件注册”步骤 进行授权。

5.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.Threading;
using System.IO;namespace RWRegister
{public partial class softWare : Form{public static bool registerState = false;private const int trialRunTime = 20;//secondspublic softWare(){InitializeComponent();}private void softWare_Load(object sender, EventArgs e){MyTimer.Enabled = true;MyTimer.Interval = 1000;toolStripSLTime.Text = "";//软件授权检测if (Register.CheckRegister()){registerState = true;}else{softWareTrialRun();}}/// <summary>/// 试运行软件(后台线程)/// </summary>private void softWareTrialRun(){Thread threadClose = new Thread(softWareClose);threadClose.IsBackground = true;//后台threadClose.Start();}private void softWareClose(){int count = 0;while (!registerState && count < trialRunTime){if (registerState){return;}Thread.Sleep(1000);//1 seccount += 1;}if (registerState){return;}else{Environment.Exit(0);}}private void toolStripMExit_Click(object sender, EventArgs e){Environment.Exit(0);}private void toolStripMRegister_Click(object sender, EventArgs e){if (registerState){MessageBox.Show("软件已注册授权!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}string fileName = string.Empty;ofdLicense.Title = "打开许可文件";ofdLicense.Filter = "许可文件(*.Key)|*.Key";if (ofdLicense.ShowDialog() == DialogResult.OK){fileName = ofdLicense.FileName;}else{return;}string localFileName = string.Concat(Environment.CurrentDirectory,Path.DirectorySeparatorChar,Register.LicenseFile);if (fileName != localFileName)File.Copy(fileName, localFileName, true);if (Register.CheckRegister()){registerState = true;MessageBox.Show("注册成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}else{MessageBox.Show("许可文件非法!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}private void MyTimer_Tick(object sender, EventArgs e){toolStripSLTime.Text = "本地时间:" + DateTime.Now.ToString();//北京时间}}
}

5.3 完整代码下载

  文档资源:基于C#的软件加密、授权与注册 货真价实、童叟无欺,欢迎指导交流学习!

基于C#的软件加密、授权与注册相关推荐

  1. 开源软件加密授权方案_身份验证和授权作为开源解决方案服务

    开源软件加密授权方案 通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务. 我将分享我的经验并最终确定解决方案的结论. 该设计包括客户端(Web应用程序)和服务器(A&A ...

  2. 软件加密技术和注册机制加密基础(转)

    软件加密技术和注册机制加密基础 本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统 ...

  3. 组态王授权产品id和授权锁id_软件加密授权工具推荐

    公司研发一套软件,需要开始往外卖,苦于上市后盗版压力比较大.于是寻找了一款软件加密授权工具-Virbox LM. Virbox LM在加密方面,能快速的完成加密工作,不需要编写代码,安全强度也很高.授 ...

  4. 推荐一款软件加密授权工具

    公司研发一套软件,需要开始往外卖,苦于上市后盗版压力比较大.于是寻找了一款软件加密授权工具-Virbox LM. Virbox LM在加密方面,能快速的完成加密工作,不需要编写代码,安全强度也很高.授 ...

  5. 软件加密技术和注册机制加密基础

    本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考.  1.加密技术概述 一个密码系统的安全性只在于密钥的保密性,而 ...

  6. 软件加密技术和注册机制

    本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统的安全性只在于密钥的保密性,而不 ...

  7. 软件加密技术和注册机制 ---- 加密一

    来源:月光博客 网址:http://www.williamlong.info/archives/704.html [资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力, 如 ...

  8. 密码学-软件加密技术和注册机制

    本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统的安全性只在于密钥的保密性,而不 ...

  9. [转载]软件加密技术和注册机制

    来源:月光博客 网址:http://www.williamlong.info/archives/704.html [资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力, 如 ...

最新文章

  1. robotframe使用之时间控件
  2. Python中如何查看模块的源码内容
  3. javascript完美判断类型
  4. SQL Server里的 ISNULL 与 Oracle 中的 NULLIF
  5. 蓝桥杯JAVA省赛2013-----B------4(黄金连分数)
  6. 【渝粤题库】国家开放大学2021春2044教育研究方法题目
  7. (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
  8. laravel 安装后500错误
  9. 【软件项目管理】用例分析方法采用一种面向对象的情景分析方法
  10. (记录)操作多层Iframe嵌套内的元素
  11. C/C++[PAT B1009]说反话
  12. HashMap源码阅读
  13. python清空字典保留变量_python中字典删除元素
  14. 如何让百度谷歌快速shopex网店系统内容
  15. mac回车键、空格键失灵解决方法
  16. 微信小程序往数组中添加元素对象
  17. Dubbo入门基础与实例讲解(超详细)
  18. 初创公司需不需要产品经理?
  19. oracle官网下载过程,Oracle 11g安装步骤
  20. ElasticSearch 7 中keyword和integer、long、short存储性能对比实验

热门文章

  1. Verilog语言入门学习(3)
  2. c语言编程基础------0.0.1c语言简易介绍(百度百科)
  3. ps4 html5转换器,PS4键鼠转换器评测XIM4 主机FPS的福音(X1通用)
  4. Mybatis Plus自动生成代码
  5. golang(3)高质量编程与性能分析
  6. 用QT和sqlite做一个小小的进销存(1)
  7. 最大质因数 matlab,试题 算法训练 最大质因数
  8. java计算机毕业设计斗南基地鲜花网上销售管理系统源码+数据库+系统+lw文档+部署
  9. 开发工具和DBeaver,连接多种数据库
  10. python计算器简单代码_自学python之简单计算器