1 private static string _sFingerPrint { get; set; } 2 3 /// <summary> 4 /// 计算机唯一标识 5 /// </summary> 6 public static string sFingerPrint 7 { 8 get 9 { 10 if (string.IsNullOrEmpty(_sFingerPrint)) 11 { 12 _sFingerPrint = GetHash("UUID >> " + UUID() + "\r\nCPU >> " + CpuId() + "\r\nBIOS >> " + 13 BiosId() + "\r\nBASE >> " + BaseId() + "\r\nDisk >> " + DiskId() + "\r\nVideo >> " + 14 VideoId() + "\r\nMAC >> " + MacId()); 15 } 16 return _sFingerPrint; 17 } 18 } 19 20 /// <summary> 21 /// 获取硬件标识符 22 /// </summary> 23 /// <param name="wmiClass"></param> 24 /// <param name="wmiProperty"></param> 25 /// <param name="wmiMustBeTrue"></param> 26 /// <returns></returns> 27 private static string identifier(string wmiClass, string wmiProperty, string wmiMustBeTrue) 28 { 29 string result = ""; 30 System.Management.ManagementClass mc = 31 new System.Management.ManagementClass(wmiClass); 32 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 33 foreach (System.Management.ManagementObject mo in moc) 34 { 35 if (mo[wmiMustBeTrue].ToString() == "True") 36 { 37 //Only get the first one 38 if (result == "") 39 { 40 try 41 { 42 result = mo[wmiProperty].ToString(); 43 break; 44 } 45 catch 46 { 47 } 48 } 49 } 50 } 51 return result; 52 } 53 /// <summary> 54 /// 获取硬件标识符 55 /// </summary> 56 /// <param name="wmiClass"></param> 57 /// <param name="wmiProperty"></param> 58 /// <returns></returns> 59 private static string identifier(string wmiClass, string wmiProperty) 60 { 61 string result = ""; 62 System.Management.ManagementClass mc = 63 new System.Management.ManagementClass(wmiClass); 64 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 65 foreach (System.Management.ManagementObject mo in moc) 66 { 67 //Only get the first one 68 if (result == "") 69 { 70 try 71 { 72 result = mo[wmiProperty].ToString(); 73 break; 74 } 75 catch 76 { 77 } 78 } 79 } 80 return result; 81 } 82 83 /// <summary> 84 /// 获取UUID 85 /// </summary> 86 /// <returns></returns> 87 public static string UUID() 88 { 89 string code = null; 90 SelectQuery query = new SelectQuery("select * from Win32_ComputerSystemProduct"); 91 using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) 92 { 93 foreach (var item in searcher.Get()) 94 { 95 using (item) 96 code = item["UUID"].ToString(); 97 } 98 } 99 return code; 100 } 101 102 /// <summary> 103 /// 获取CPUID 104 /// </summary> 105 /// <returns></returns> 106 public static string CpuId() 107 { 108 //Uses first CPU identifier available in order of preference 109 //Don't get all identifiers, as it is very time consuming 110 string retVal = identifier("Win32_Processor", "UniqueId"); 111 if (retVal == "") //If no UniqueID, use ProcessorID 112 { 113 retVal = identifier("Win32_Processor", "ProcessorId"); 114 if (retVal == "") //If no ProcessorId, use Name 115 { 116 retVal = identifier("Win32_Processor", "Name"); 117 if (retVal == "") //If no Name, use Manufacturer 118 { 119 retVal = identifier("Win32_Processor", "Manufacturer"); 120 } 121 //Add clock speed for extra security 122 retVal += identifier("Win32_Processor", "MaxClockSpeed"); 123 } 124 } 125 return retVal; 126 } 127 /// <summary> 128 /// 获取BIOSID 129 /// </summary> 130 /// <returns></returns> 131 public static string BiosId() 132 { 133 return identifier("Win32_BIOS", "Manufacturer") 134 + identifier("Win32_BIOS", "SMBIOSBIOSVersion") 135 + identifier("Win32_BIOS", "IdentificationCode") 136 + identifier("Win32_BIOS", "SerialNumber") 137 + identifier("Win32_BIOS", "ReleaseDate") 138 + identifier("Win32_BIOS", "Version"); 139 } 140 /// <summary> 141 /// 获取硬盘ID 142 /// </summary> 143 /// <returns></returns> 144 public static string DiskId() 145 { 146 return identifier("Win32_DiskDrive", "Model") 147 + identifier("Win32_DiskDrive", "Manufacturer") 148 + identifier("Win32_DiskDrive", "Signature") 149 + identifier("Win32_DiskDrive", "TotalHeads"); 150 } 151 /// <summary> 152 /// 获取主板ID 153 /// </summary> 154 /// <returns></returns> 155 public static string BaseId() 156 { 157 return identifier("Win32_BaseBoard", "Model") 158 + identifier("Win32_BaseBoard", "Manufacturer") 159 + identifier("Win32_BaseBoard", "Name") 160 + identifier("Win32_BaseBoard", "SerialNumber"); 161 } 162 /// <summary> 163 /// 获取主视频控制器ID 164 /// </summary> 165 /// <returns></returns> 166 public static string VideoId() 167 { 168 return identifier("Win32_VideoController", "DriverVersion") 169 + identifier("Win32_VideoController", "Name"); 170 } 171 /// <summary> 172 /// 获取网卡ID 173 /// </summary> 174 /// <returns></returns> 175 public static string MacId() 176 { 177 return identifier("Win32_NetworkAdapterConfiguration", 178 "MACAddress", "IPEnabled"); 179 }