using System; using System.Collections.Generic; using System.Linq; // NuGet search Management using System.Management; using System.Text;
namespace RegLib { public static class RegHelper { /// <summary> /// 获取注册码 /// </summary> /// <param name="password"></param> /// <param name="data"></param> /// <returns></returns> public static string EncodeCode(string password, Dictionary<string, string> data) { if (data == null || data.Count == 0) throw new ArgumentException("data can not be empty");
var sb = new StringBuilder(); foreach (var d in data) { sb.Append($"{d.Key}:{d.Value}").Append(','); } sb.Remove(sb.Length - 1, 1); var text = sb.ToString(); var bsdata = Encoding.UTF8.GetBytes(text); for (var i = 0; i < bsdata.Length; i += 2) { bsdata[i] = (byte)(~bsdata[i]); } text = Convert.ToBase64String(bsdata); return AESHelper.AesEncrypt(text, password); }
/// <summary> /// 解密注册码 /// </summary> /// <param name="password"></param> /// <param name="code"></param> /// <returns></returns> public static Dictionary<string, string> DecodeCode(string password, string code) { var data = AESHelper.AesDecrypt(code, password); var bsdata = Convert.FromBase64String(data); for (var i = 0; i < bsdata.Length; i += 2) { bsdata[i] = (byte)(~bsdata[i]); } var text = Encoding.UTF8.GetString(bsdata); var ret = new Dictionary<string, string>(); foreach(var it in text.Split(',')) { var vs = it.Split(':'); if (vs.Length != 2) continue; ret[vs[0]] = vs[1]; } return ret; }
/// <summary> /// 获取机器码 /// </summary> /// <param name="cpuid"></param> /// <param name="diskid"></param> /// <returns></returns> public static string GetMachineCode(string cpuid, string diskid) { var id = cpuid + diskid; var bs = Encoding.ASCII.GetBytes(id); for (var i = 0; i < bs.Length; i += 2) { bs[i] = (byte)(~bs[i]); } return Convert.ToBase64String(bs); }
private static string GetCpuID() { string strCpu = null; var myCpu = new ManagementClass("win32_Processor"); var myCpuCollection = myCpu.GetInstances(); foreach (var myObject in myCpuCollection) { strCpu = myObject.Properties["Processorid"].Value.ToString(); } return strCpu; }
private static string GetDiskID() { var mc = new ManagementClass("win32_NetworkAdapterConfiguration"); var disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\""); disk.Get(); return disk.GetPropertyValue("VolumeSerialNumber").ToString(); }
/// <summary> /// 获取当前电脑的机器码 /// </summary> /// <returns></returns> public static string GetCurrentMachineCode() { var cpuid = GetCpuID(); if (string.IsNullOrEmpty(cpuid)) return null;
var diskid = GetDiskID(); if (string.IsNullOrEmpty(diskid)) return null;