有些时候做的某些工具不想被传播,就想加个密,绑定电脑授权使用,这就需要找到电脑的唯一识别码

找了很多都没找到电脑真正的唯一识别码,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();<br><br>是因为有些设备确实获取不到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();
           }
       }

这样结果就固定长度啦,也几乎解密不出来,用的时候再次获取识别码并验证就好了,对于没有服务器需要本地授权的小伙伴,就把这些东西加密,再写入到加密文件中就好了,加密方法可以等我发布下一篇文章哦!