diff --git a/UserClass/HardwareSN.cs b/UserClass/HardwareSN.cs
new file mode 100644
index 0000000..65aaefa
--- /dev/null
+++ b/UserClass/HardwareSN.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Management;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace formula_manage.UserClass
+{
+ ///
+ /// 获取硬件SN
+ ///
+ internal class HardwareSN
+ {
+ ///
+ /// 获取cpuid
+ ///
+ public static string GetCPUSerialNumber()
+ {
+ try
+ {
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
+ string cpuSerialNumber = "";
+ foreach (ManagementObject mo in searcher.Get())
+ {
+ cpuSerialNumber = mo["ProcessorId"].ToString().Trim();
+ break;
+ }
+ return cpuSerialNumber;
+ }
+ catch
+ {
+ return "";
+ }
+ }
+ ///
+ /// 获取主板id
+ ///
+ public static string GetBIOSSerialNumber()
+ {
+ try
+ {
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
+ string biosSerialNumber = "";
+ foreach (ManagementObject mo in searcher.Get())
+ {
+ biosSerialNumber = mo.GetPropertyValue("SerialNumber").ToString().Trim();
+ break;
+ }
+ return biosSerialNumber;
+ }
+ catch
+ {
+ return "";
+ }
+ }
+ ///
+ /// 获取硬盘id
+ ///
+ public static string GetHardDiskSerialNumber()
+ {
+ try
+ {
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
+ string hardDiskSerialNumber = "";
+ foreach (ManagementObject mo in searcher.Get())
+ {
+ hardDiskSerialNumber = mo["SerialNumber"].ToString().Trim();
+ break;
+ }
+ return hardDiskSerialNumber;
+ }
+ catch
+ {
+ return "";
+ }
+ }
+ ///
+ /// 获取网卡id
+ ///
+ public static string GetNetCardMACAddress()
+ {
+ try
+ {
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))");
+ string netCardMACAddress = "";
+ foreach (ManagementObject mo in searcher.Get())
+ {
+ netCardMACAddress = mo["MACAddress"].ToString().Trim();
+ break;
+ }
+ return netCardMACAddress;
+ }
+ catch
+ {
+ return "";
+ }
+ }
+ }
+}
diff --git a/UserClass/MD5check.cs b/UserClass/MD5check.cs
new file mode 100644
index 0000000..6b917d2
--- /dev/null
+++ b/UserClass/MD5check.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace formula_manage.UserClass
+{
+ ///
+ /// MD5加密
+ ///
+ internal class MD5check
+ {
+ ///
+ /// 16位MD5加密
+ ///
+ ///
+ ///
+ public static string MD5Encrypt16(string password)
+ {
+ var md5 = new MD5CryptoServiceProvider();
+ string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);
+ t2 = t2.Replace("-", "");
+ return t2;
+ }
+ ///
+ /// 32位MD5加密
+ ///
+ ///
+ ///
+ public static string MD5Encrypt32(string password)
+ {
+ string cl = password;
+ string pwd = "";
+ MD5 md5 = MD5.Create(); //实例化一个md5对像
+ // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
+ byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+ // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
+ for (int i = 0; i < s.Length; i++)
+ {
+ // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
+ pwd = pwd + s[i].ToString("X");
+ }
+ return pwd;
+ }
+ ///
+ /// 64位MD5加密
+ ///
+ ///
+ ///
+ public static string MD5Encrypt64(string password)
+ {
+ string cl = password;
+ //string pwd = "";
+ MD5 md5 = MD5.Create(); //实例化一个md5对像
+ // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
+ byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+ return Convert.ToBase64String(s);
+ }
+ }
+}
diff --git a/UserClass/StrToInt.cs b/UserClass/StrToInt.cs
new file mode 100644
index 0000000..212c2c1
--- /dev/null
+++ b/UserClass/StrToInt.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace formula_manage.UserClass
+{
+ ///
+ /// 字符串转数字
+ ///
+ internal class StrToInt
+ {
+ ///
+ /// 十六进制字符串转十进制
+ ///
+ /// 十六进制字符
+ ///
+ public static int To16Convert10(string str)
+ {
+ int res = 0;
+ try
+ {
+ str = str.Trim().Replace(" ", ""); //移除空字符
+ //方法1
+ res = int.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier);
+ //方法2
+ //int r2 = System.Int32.Parse(str, System.Globalization.NumberStyles.HexNumber);
+ //Console.WriteLine(r2);
+ //方法3
+ //int r3 = Convert.ToInt32(str, 16);
+ //Console.WriteLine(r3);
+ }
+ catch (Exception e)
+ {
+ res = 0;
+ }
+ return res;
+ }
+ }
+}
diff --git a/Windows/CDKEY.xaml.cs b/Windows/CDKEY.xaml.cs
index 5b689ee..e41e29f 100644
--- a/Windows/CDKEY.xaml.cs
+++ b/Windows/CDKEY.xaml.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
+using System.Globalization;
using System.Linq;
using System.Management;
using System.Runtime.InteropServices;
@@ -39,160 +40,66 @@ namespace formula_manage.Windows
private void Window_CDKEY(object sender, RoutedEventArgs e) //打开页面
{
- UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(INIPath); //读配置文件
-
- // KEY = Configini.IniReadvalue("CDKEY", "KEY"); //读配置文件
- // SN = Configini.IniReadvalue("CDKEY", "SN");
// 获取CPU序列号
- string cpuSerialNumber = GetCPUSerialNumber();
+ string cpuSerialNumber = HardwareSN.GetCPUSerialNumber();
// 获取主板序列号
- string biosSerialNumber = GetBIOSSerialNumber();
+ string biosSerialNumber = HardwareSN.GetBIOSSerialNumber();
// 获取硬盘序列号
- //string hardDiskSerialNumber = GetHardDiskSerialNumber();
+ //string hardDiskSerialNumber = HardwareSN.GetHardDiskSerialNumber();
// 获取网卡地址
- //string netCardMACAddress = GetNetCardMACAddress();
+ //string netCardMACAddress = HardwareSN.GetNetCardMACAddress();
- sn_id.Text = MD5Encrypt16(cpuSerialNumber+ biosSerialNumber);
- }
- ///
- /// 获取cpuid
- ///
- public static string GetCPUSerialNumber()
- {
- try
- {
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
- string cpuSerialNumber = "";
- foreach (ManagementObject mo in searcher.Get())
- {
- cpuSerialNumber = mo["ProcessorId"].ToString().Trim();
- break;
- }
- return cpuSerialNumber;
- }
- catch
- {
- return "";
- }
- }
- ///
- /// 获取主板id
- ///
- public static string GetBIOSSerialNumber()
- {
- try
- {
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
- string biosSerialNumber = "";
- foreach (ManagementObject mo in searcher.Get())
- {
- biosSerialNumber = mo.GetPropertyValue("SerialNumber").ToString().Trim();
- break;
- }
- return biosSerialNumber;
- }
- catch
- {
- return "";
- }
- }
- ///
- /// 获取硬盘id
- ///
- public static string GetHardDiskSerialNumber()
- {
- try
- {
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
- string hardDiskSerialNumber = "";
- foreach (ManagementObject mo in searcher.Get())
- {
- hardDiskSerialNumber = mo["SerialNumber"].ToString().Trim();
- break;
- }
- return hardDiskSerialNumber;
- }
- catch
- {
- return "";
- }
- }
- ///
- /// 获取网卡id
- ///
- public static string GetNetCardMACAddress()
+ sn_id.Text = MD5check.MD5Encrypt16(cpuSerialNumber+ biosSerialNumber);//生成id基于硬件值的md5校验
+ }
+
+ private void Button_Click_2(object sender, RoutedEventArgs e) //cdk确认按钮
{
- try
+ string id_1;
+ id_1 = sn_id.Text.Substring(5, 1) + sn_id.Text.Substring(0, 1) + sn_id.Text.Substring(4, 1) + sn_id.Text.Substring(1, 1) + sn_id.Text.Substring(3, 1) + sn_id.Text.Substring(2, 1);
+
+ if (id_1 == cdk.Text.Substring(0, 6))
{
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))");
- string netCardMACAddress = "";
- foreach (ManagementObject mo in searcher.Get())
+ if (CRCcheck16.ToCRC16(CRCcheck16.StringToHexByte(cdk.Text.Substring(0, 12)), true) == cdk.Text.Substring(12, 4)) //校验key的crc校验值
{
- netCardMACAddress = mo["MACAddress"].ToString().Trim();
- break;
- }
- return netCardMACAddress;
- }
- catch
- {
- return "";
- }
- }
- ///
- /// 16位MD5加密
- ///
- ///
- ///
- public static string MD5Encrypt16(string password)
- {
- var md5 = new MD5CryptoServiceProvider();
- string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);
- t2 = t2.Replace("-", "");
- return t2;
- }
- ///
- /// 32位MD5加密
- ///
- ///
- ///
- public static string MD5Encrypt32(string password)
- {
- string cl = password;
- string pwd = "";
- MD5 md5 = MD5.Create(); //实例化一个md5对像
- // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
- byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
- // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
- for (int i = 0; i < s.Length; i++)
- {
- // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
- pwd = pwd + s[i].ToString("X");
- }
- return pwd;
- }
- ///
- /// 64位MD5加密
- ///
- ///
- ///
- public static string MD5Encrypt64(string password)
- {
- string cl = password;
- //string pwd = "";
- MD5 md5 = MD5.Create(); //实例化一个md5对像
- // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
- byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
- return Convert.ToBase64String(s);
- }
-
+ string Y = (2255 - StrToInt.To16Convert10(cdk.Text.Substring(6, 2))).ToString();
+ string M = (255 - StrToInt.To16Convert10(cdk.Text.Substring(8, 2))).ToString();
+ string D = (255 - StrToInt.To16Convert10(cdk.Text.Substring(10, 2))).ToString();
- private void Button_Click_2(object sender, RoutedEventArgs e)
- {
- string t;
- t = sn_id.Text.Substring(0,6);
+ string YY = DateTime.Now.ToString("yyyy");
+ string MM = DateTime.Now.ToString("MM");
+ string DD = DateTime.Now.ToString("dd");
- cdk.Text = t +"240102" + CRCcheck16.ToCRC16(CRCcheck16.StringToHexByte(t+ "240102"),true);
+ if (string.Compare(Y, YY) >= 0)
+ {
+ if (string.Compare(M, MM) >= 0)
+ {
+ if (string.Compare(D, DD) >= 0)
+ {
+ System.Windows.MessageBox.Show("CDKEY:OK");
+ sn_time.Text = "CDkeyDueTime: " + Y + "-" + M + "-" + D;
+ UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(INIPath);
+ Configini.IniWritevalue("SN", " SN1", id_1);
+ Configini.IniWritevalue("SN", " SN2", cdk.Text.Substring(6, 2));
+ Configini.IniWritevalue("SN", " SN3", cdk.Text.Substring(8, 2));
+ Configini.IniWritevalue("SN", " SN4", cdk.Text.Substring(10, 2));
+ }
+ else
+ {
+ System.Windows.MessageBox.Show("CDKEY:overdue");
+ }
+ }
+ else
+ {
+ System.Windows.MessageBox.Show("CDKEY:overdue");
+ }
+ }
+ else
+ {
+ System.Windows.MessageBox.Show("CDKEY:overdue");
+ }
+ }
+ }
}
}
diff --git a/formula_manage.csproj b/formula_manage.csproj
index b885413..c3ecc9a 100644
--- a/formula_manage.csproj
+++ b/formula_manage.csproj
@@ -217,10 +217,13 @@
+
+
+