C#获取设备的mac码、uuid作为唯一识别码
有些时候做的某些工具不想被传播,就想加个密,绑定电脑授权使用,这就需要找到电脑的唯一识别码
找了很多都没找到电脑真正的唯一识别码,MAC经验证是会变的,最终选择使用uuid
/// <summary> /// 获取UUID /// </summary> /// <returns></returns> public static string GetUuid() { string uuid = null; try { SelectQuery query = new SelectQuery("select * from Win32_ComputerSystemProduct"); using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) { foreach (var item in searcher.Get()) { using (item) uuid = item["UUID"].ToString(); } } //有些厂商的配件不支持UUId会显示为一堆F if (uuid == null || uuid == "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF") { uuid = GetMacAddress(); } return uuid; } catch (Exception) { return "unknown"; } }
在上边有一行代码
uuid = GetMacAddress();
是因为有些设备确实获取不到uuid,那就用mac码替代,虽然可变但总比没有强,对于非常需要安全性的应用还是不建议这么做,下边是获取mac码的代码
/// <summary> /// 获取本机MAC地址 /// </summary> /// <returns>本机MAC地址</returns> public static string GetMacAddress() { try { string strMac = string.Empty; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if ((bool)mo["IPEnabled"] == true) { strMac = mo["MacAddress"].ToString(); } } moc = null; mc = null; return strMac; } catch { return "unknown"; } }
为了避免两种识别码长度不一致,也为了防止用户看出这是什么(神秘感),我们对它进行MD5加密,这样结果就是固定位数了,我一般用以下这种方法
public static string GenerateMD5(string txt) { using (MD5 mi = MD5.Create()) { byte[] buffer = Encoding.Default.GetBytes(txt); //开始加密 byte[] newBuffer = mi.ComputeHash(buffer); StringBuilder sb = new StringBuilder(); for (int i = 0; i < newBuffer.Length; i++) { sb.Append(newBuffer[i].ToString("x2")); } return sb.ToString(); } }
这样结果就固定长度啦,也几乎解密不出来,用的时候再次获取识别码并验证就好了,对于没有服务器需要本地授权的小伙伴,就把这些东西加密,再写入到加密文件中就好了,写入到加密文件的方法见我上一篇文档
地址在这里,是转载的别人的。