using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Management; using System.Security.Cryptography; using System.Text; namespace HslCommunication.BasicFramework { /// /// 软件授权类 /// public class SoftAuthorize : SoftFileSaveBase { #region Constructor /// /// 实例化一个软件授权类 /// public SoftAuthorize() { machine_code = GetInfo(); LogHeaderText = "SoftAuthorize"; } #endregion #region Static Members /// /// 注册码描述文本 /// public static readonly string TextCode = "Code"; #endregion #region Private Members private string FinalCode { get; set; } = ""; /// /// 是否正式发行版,是的话就取消授权 /// public bool IsReleaseVersion { get; set; } = false; /// /// 指示是否加载过文件信息 /// private bool HasLoadByFile { get; set; } = false; private string machine_code = ""; #endregion #region Public Members /// /// 指示系统是否处于试用运行 /// public bool IsSoftTrial { get; set; } = false; #endregion #region Public Method /// /// 获取本机的机器码 /// /// public string GetMachineCodeString() { return machine_code; } /// /// 获取需要保存的数据内容 /// /// public override string ToSaveString() { //JObject json = new JObject //{ // { TextCode, new JValue(FinalCode) } //}; //return json.ToString(); return ""; } /// /// 从字符串加载数据 /// /// public override void LoadByString(string content) { JObject json = JObject.Parse(content); FinalCode = SoftBasic.GetValueFromJsonObject(json, TextCode, FinalCode); HasLoadByFile = true; } /// /// 使用特殊加密算法加密数据 /// public override void SaveToFile() { SaveToFile(m => SoftSecurity.MD5Encrypt(m)); } /// /// 使用特殊解密算法解密数据 /// public override void LoadByFile() { LoadByFile(m => SoftSecurity.MD5Decrypt(m)); } /// /// 检查该注册码是否是正确的注册码 /// /// /// 数据加密的方法,必须用户指定 /// 是否注册成功 public bool CheckAuthorize(string code, Func encrypt) { if (code != encrypt(GetMachineCodeString())) { return false; } else { FinalCode = code; SaveToFile(); return true; } } /// /// 检测授权是否成功 /// /// 数据加密的方法,必须用户指定 /// 是否成功授权 public bool IsAuthorizeSuccess(Func encrypt) { if (IsReleaseVersion) return true; if (encrypt(GetMachineCodeString()) == FinalCode) { return true; } else { FinalCode = ""; SaveToFile(); return false; } } #endregion #region Static Method /// /// 获取本计算机唯一的机器码 /// /// public static string GetInfo() { string unique = ""; // 获取处理器信息 ManagementClass cimobject = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { unique += mo.Properties["ProcessorId"].Value.ToString(); } // 获取硬盘ID ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc1 = cimobject1.GetInstances(); foreach (ManagementObject mo in moc1) { unique += (string)mo.Properties["Model"].Value; break; } // 获取BIOS ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select SerialNumber From Win32_BIOS"); ManagementObjectCollection moc2 = searcher.Get(); if (moc2.Count > 0) { foreach (ManagementObject share in moc2) { unique += share["SerialNumber"].ToString(); } } MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); return SoftBasic.ByteToHexString(md5.ComputeHash(Encoding.Unicode.GetBytes(unique))).Substring(0, 25); } #endregion } }