182 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			182 lines
		
	
	
		
			6.1 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"); | |||
|  |             try | |||
|  |             { | |||
|  |                 ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); | |||
|  |                 foreach (ManagementObject myObject in myCpuConnection) | |||
|  |                 { | |||
|  |                     strCpu = myObject.Properties["Processorid"].Value.ToString(); | |||
|  |                     break; | |||
|  |                 } | |||
|  |             } | |||
|  |             catch(Exception ex) | |||
|  |             { | |||
|  |                 strCpu = ex.ToString(); | |||
|  |             } | |||
|  | 
 | |||
|  |             if (System.Web.HttpContext.Current.Application["CPUID"] == null) | |||
|  |             { | |||
|  |                 System.Web.HttpContext.Current.Application.Lock(); | |||
|  |                 System.Web.HttpContext.Current.Application["CPUID"] = strCpu; | |||
|  |                 System.Web.HttpContext.Current.Application.UnLock(); | |||
|  |             } | |||
|  |             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(); | |||
|  |         } | |||
|  |     } | |||
|  | } |