|
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace Commons 6 { 7 /// <summary> 8 /// 提供用户硬件唯一信息的辅助类 9 /// </summary> 10 public class FingerprintHelper 11 { 12 public static string Value() 13 { 14 return pack(cpuId() 15 + biosId() 16 + diskId() 17 + baseId() 18 + videoId() 19 + macId()); 20 } 21 22 //Return a hardware identifier 23 private static string identifier(string wmiClass, string wmiProperty, string wmiMustBeTrue) 24 { 25 string result=""; 26 System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); 27 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 28 foreach (System.Management.ManagementObject mo in moc) 29 { 30 if (mo[wmiMustBeTrue].ToString()=="True") 31 { 32 33 //Only get the first one 34 if (result=="") 35 { 36 try 37 { 38 result = mo[wmiProperty].ToString(); 39 break; 40 } 41 catch 42 { 43 } 44 } 45 46 } 47 } 48 return result; 49 } 50 51 //Return a hardware identifier 52 private static string identifier(string wmiClass, string wmiProperty) 53 { 54 string result=""; 55 System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); 56 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 57 foreach (System.Management.ManagementObject mo in moc) 58 { 59 60 //Only get the first one 61 if (result=="") 62 { 63 try 64 { 65 result = mo[wmiProperty].ToString(); 66 break; 67 } 68 catch 69 { 70 } 71 } 72 73 } 74 return result; 75 } 76 77 private static string cpuId() 78 { 79 //Uses first CPU identifier available in order of preference 80 //Don‘t get all identifiers, as very time consuming 81 string retVal = identifier("Win32_Processor", "UniqueId"); 82 if (retVal=="") //If no UniqueID, use ProcessorID 83 { 84 retVal = identifier("Win32_Processor", "ProcessorId"); 85 86 if (retVal=="") //If no ProcessorId, use Name 87 { 88 retVal = identifier("Win32_Processor", "Name"); 89 90 91 if (retVal=="") //If no Name, use Manufacturer 92 { 93 retVal = identifier("Win32_Processor", "Manufacturer"); 94 } 95 96 //Add clock speed for extra security 97 retVal +=identifier("Win32_Processor", "MaxClockSpeed"); 98 } 99 } 100 101 return retVal; 102 } 103 104 //BIOS Identifier 105 private static string biosId() 106 { 107 return identifier("Win32_BIOS", "Manufacturer") 108 + identifier("Win32_BIOS", "SMBIOSBIOSVersion") 109 + identifier("Win32_BIOS", "IdentificationCode") 110 + identifier("Win32_BIOS", "SerialNumber") 111 + identifier("Win32_BIOS", "ReleaseDate") 112 + identifier("Win32_BIOS", "Version"); 113 } 114 115 //Main physical hard drive ID 116 private static string diskId() 117 { 118 return identifier("Win32_DiskDrive", "Model") 119 + identifier("Win32_DiskDrive", "Manufacturer") 120 + identifier("Win32_DiskDrive", "Signature") 121 + identifier("Win32_DiskDrive", "TotalHeads"); 122 } 123 124 //Motherboard ID 125 private static string baseId() 126 { 127 return identifier("Win32_BaseBoard", "Model") 128 + identifier("Win32_BaseBoard", "Manufacturer") 129 + identifier("Win32_BaseBoard", "Name") 130 + identifier("Win32_BaseBoard", "SerialNumber"); 131 } 132 133 //Primary video controller ID 134 private static string videoId() 135 { 136 return identifier("Win32_VideoController", "DriverVersion") 137 + identifier("Win32_VideoController", "Name"); 138 } 139 140 //First enabled network card ID 141 private static string macId() 142 { 143 return identifier("Win32_NetworkAdapterConfiguration", "MACAddress", "IPEnabled"); 144 } 145 146 //Packs the string to 8 digits 147 private static string pack(string text) 148 { 149 string retVal; 150 int x = 0; 151 int y = 0; 152 foreach (char n in text) 153 { 154 y++; 155 x += (n*y); 156 } 157 retVal = x.ToString() + "00000000"; 158 159 return retVal.Substring(0, 8); 160 } 161 } 162 }
转自:记住你 C#社区
时间: 2024-10-29 17:46:45