167 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using System.Web;
							 | 
						|||
| 
								 | 
							
								using System.Data;
							 | 
						|||
| 
								 | 
							
								using Microsoft.Win32;
							 | 
						|||
| 
								 | 
							
								using System.Management;
							 | 
						|||
| 
								 | 
							
								using System.Security.Cryptography;
							 | 
						|||
| 
								 | 
							
								using System.Text;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace BLL
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public static class SoftRegeditService
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 取得设备硬盘的卷标号
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        private static string GetDiskVolumeSerialNumber()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
							 | 
						|||
| 
								 | 
							
								            ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
							 | 
						|||
| 
								 | 
							
								            disk.Get();
							 | 
						|||
| 
								 | 
							
								            return disk.GetPropertyValue("VolumeSerialNumber").ToString();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获得CPU的序列号
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        private static string getCpu()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            string strCpu = null;
							 | 
						|||
| 
								 | 
							
								            ManagementClass myCpu = new ManagementClass("win32_Processor");
							 | 
						|||
| 
								 | 
							
								            ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
							 | 
						|||
| 
								 | 
							
								            foreach (ManagementObject myObject in myCpuConnection)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                strCpu = myObject.Properties["Processorid"].Value.ToString();
							 | 
						|||
| 
								 | 
							
								                break;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return strCpu;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获取序列号
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static string SerialId()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            string serialId = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
							 | 
						|||
| 
								 | 
							
								            string lastStr = String.Empty;
							 | 
						|||
| 
								 | 
							
								            for (int i = 0; i < serialId.Length; i = i + 6)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                lastStr = lastStr + serialId.Substring(i, 6) + "-";
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return lastStr.Substring(0, lastStr.Length - 1);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获取注册码
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns>注册码</returns>
							 | 
						|||
| 
								 | 
							
								        public static string GetRegeditCode()
							 | 
						|||
| 
								 | 
							
								        { 
							 | 
						|||
| 
								 | 
							
								          RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");
							 | 
						|||
| 
								 | 
							
								            RegistryKey choseKey = softwareKey.OpenSubKey("SOW");
							 | 
						|||
| 
								 | 
							
								            if (choseKey != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                RegistryKey SowKey = choseKey.OpenSubKey("GOL");
							 | 
						|||
| 
								 | 
							
								                if (SowKey != null)               //防止在"SOW"键下有多键值时产生错误
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    string valueId = SowKey.GetValue("RegisterCode").ToString();
							 | 
						|||
| 
								 | 
							
								                    return valueId;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return string.Empty;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return string.Empty;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 注册信息写入函数
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="serialId">序列号</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="registerCode">注册码</param>
							 | 
						|||
| 
								 | 
							
								        public static void WriteRegedit(string serialId, string registerCode)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // 以可写的方式打开SOFTWARE子键
							 | 
						|||
| 
								 | 
							
								            RegistryKey key = Registry.LocalMachine;
							 | 
						|||
| 
								 | 
							
								            RegistryKey softwareKey = key.OpenSubKey("SOFTWARE", true);
							 | 
						|||
| 
								 | 
							
								            // 依次创建Chose子键和Value子键
							 | 
						|||
| 
								 | 
							
								            RegistryKey choseKey = softwareKey.CreateSubKey("SOW");
							 | 
						|||
| 
								 | 
							
								            RegistryKey ValueKey = choseKey.CreateSubKey("GOL");
							 | 
						|||
| 
								 | 
							
								            // 设置Value键的SetValue方法可能引发异常
							 | 
						|||
| 
								 | 
							
								            ValueKey.SetValue("SerialId", serialId);
							 | 
						|||
| 
								 | 
							
								            ValueKey.SetValue("RegisterCode", registerCode);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 是否注册
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static bool IsRegedit()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");
							 | 
						|||
| 
								 | 
							
								            RegistryKey choseKey = softwareKey.OpenSubKey("SOW");
							 | 
						|||
| 
								 | 
							
								            if (choseKey != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                RegistryKey SowKey = choseKey.OpenSubKey("GOL");
							 | 
						|||
| 
								 | 
							
								                if (SowKey != null)               //防止在"SOW"键下有多键值时产生错误
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    string keyId = SowKey.GetValue("SerialId").ToString();
							 | 
						|||
| 
								 | 
							
								                    string valueId = SowKey.GetValue("RegisterCode").ToString();
							 | 
						|||
| 
								 | 
							
								                    
							 | 
						|||
| 
								 | 
							
								                    //string str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(keyId, "MD5");
							 | 
						|||
| 
								 | 
							
								                   
							 | 
						|||
| 
								 | 
							
								                    string str = Md532(keyId);
							 | 
						|||
| 
								 | 
							
								                    string substr = str.Substring(8, 24);
							 | 
						|||
| 
								 | 
							
								                    string lastStr = String.Empty;
							 | 
						|||
| 
								 | 
							
								                    for (int i = 0; i < substr.Length; i = i + 6)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        lastStr = lastStr + substr.Substring(i, 6) + "-";
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    string regeditCode = lastStr.Substring(0, lastStr.Length - 1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    if (regeditCode == valueId && keyId == SerialId())
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        return true;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        return false;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return false;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return false;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static string Md532(string str)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            MD5 md5 = MD5.Create();
							 | 
						|||
| 
								 | 
							
								            byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            StringBuilder sb = new StringBuilder();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            for (int i = 0; i < bytes.Length; i++)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                sb.Append(bytes[i]);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return sb.ToString();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |