架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 55047|回复: 4

[资料] c#获取电脑硬件设备唯一标识

[复制链接]
发表于 2016-5-25 16:39:23 | 显示全部楼层 |阅读模式
  1. public class SoftReg
  2.     {
  3.         /// <summary>
  4.         /// 获取设备硬件码
  5.         /// </summary>
  6.         /// <returns></returns>
  7.         public static string Token()
  8.         {
  9.             string cpu=GetHDid();
  10.             string mac=GetMoAddress();
  11.             //应该总有一个能获取到吧!!
  12.             if (cpu != null || mac != null)
  13.             {
  14.                 string temp = cpu + mac;
  15.                 return GetMD5String(temp);
  16.             }
  17.             else {
  18.                 return null;
  19.             }
  20.         }

  21.         ///   <summary>
  22.         ///   获取硬盘ID     
  23.         ///   </summary>
  24.         ///   <returns> string </returns>
  25.         public static string GetHDid()
  26.         {
  27.             try
  28.             {
  29.                 string HDid = null;
  30.                 using (ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"))
  31.                 {
  32.                 ManagementObjectCollection moc1 = cimobject1.GetInstances();
  33.                 foreach (ManagementObject mo in moc1)
  34.                 {
  35.                     HDid = (string)mo.Properties["Model"].Value;
  36.                     mo.Dispose();
  37.                 }
  38.             }
  39.             return HDid;
  40.             }
  41.             catch (Exception ex)
  42.             {
  43.                 return null;
  44.             }
  45.         }

  46.         ///   <summary>
  47.         ///   获取网卡硬件地址
  48.         ///   </summary>
  49.         ///   <returns> string </returns>
  50.         public static string GetMoAddress()
  51.         {
  52.             try
  53.             {
  54.                 string MoAddress = null;
  55.                 using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
  56.                 {
  57.                     ManagementObjectCollection moc2 = mc.GetInstances();
  58.                     foreach (ManagementObject mo in moc2)
  59.                     {
  60.                         if ((bool)mo["IPEnabled"] == true)
  61.                             MoAddress = mo["MacAddress"].ToString();
  62.                         mo.Dispose();
  63.                     }
  64.                 }
  65.                 return MoAddress;
  66.             }
  67.             catch (Exception ex)
  68.             {
  69.                 return null;
  70.             }
  71.         }

  72.         /// <summary>
  73.         /// 通过字符串获取MD5值,返回32位字符串。
  74.         /// </summary>
  75.         /// <param name="str"></param>
  76.         /// <returns></returns>
  77.         public static string GetMD5String(string str)
  78.         {
  79.             MD5 md5 = MD5.Create();
  80.             byte[] data = Encoding.UTF8.GetBytes(str);
  81.             byte[] data2 = md5.ComputeHash(data);

  82.             return GetbyteToString(data2);
  83.             //return BitConverter.ToString(data2).Replace("-", "").ToLower();
  84.         }
  85.         private static string GetbyteToString(byte[] data)
  86.         {
  87.             StringBuilder sb = new StringBuilder();
  88.             for (int i = 0; i < data.Length; i++)
  89.             {
  90.                 sb.Append(data[i].ToString("x2"));
  91.             }
  92.             return sb.ToString();
  93.         }
  94.     }
复制代码






上一篇:Bootstrap模态框遮挡datepicker时间控件
下一篇:c#通过调用Win32 API函数清楚浏览器缓存和cookie
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-5-26 12:01:41 | 显示全部楼层
上面那个有问题,网卡或者ip变了,会生成新的机器码,所以,换下面这个吧
  1. public class SoftReg
  2.     {
  3.         /// <summary>
  4.         /// 获取设备硬件码
  5.         /// </summary>
  6.         /// <returns></returns>
  7.         public static string Token()
  8.         {
  9.             string HDid = GetHDid();
  10.             //string mac=GetMoAddress();
  11.             string cpu = GetCpuID();
  12.             //应该总有一个能获取到吧!!
  13.             if (HDid != null || cpu != null)
  14.             {
  15.                 string temp = HDid + cpu;
  16.                 return GetMD5String(temp);
  17.             }
  18.             else {
  19.                 return null;
  20.             }
  21.         }


  22.         public static string GetCpuID()
  23.         {
  24.             try
  25.             {
  26.                 //获取CPU序列号代码
  27.                 string cpuInfo = "";//cpu序列号
  28.                 ManagementClass mc = new ManagementClass("Win32_Processor");
  29.                 ManagementObjectCollection moc = mc.GetInstances();
  30.                 foreach (ManagementObject mo in moc)
  31.                 {
  32.                     cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
  33.                 }
  34.                 moc = null;
  35.                 mc = null;
  36.                 return cpuInfo;
  37.             }
  38.             catch
  39.             {
  40.                 return "unknow";
  41.             }
  42.         }
  43.         ///   <summary>
  44.         ///   获取硬盘ID     
  45.         ///   </summary>
  46.         ///   <returns> string </returns>
  47.         public static string GetHDid()
  48.         {
  49.             try
  50.             {
  51.                 string HDid = null;
  52.                 using (ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"))
  53.                 {
  54.                 ManagementObjectCollection moc1 = cimobject1.GetInstances();
  55.                 foreach (ManagementObject mo in moc1)
  56.                 {
  57.                     HDid = (string)mo.Properties["Model"].Value;
  58.                     mo.Dispose();
  59.                 }
  60.             }
  61.             return HDid;
  62.             }
  63.             catch (Exception ex)
  64.             {
  65.                 return null;
  66.             }
  67.         }

  68.         ///   <summary>
  69.         ///   获取网卡硬件地址
  70.         ///   </summary>
  71.         ///   <returns> string </returns>
  72.         public static string GetMoAddress()
  73.         {
  74.             try
  75.             {
  76.                 string MoAddress = null;
  77.                 using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
  78.                 {
  79.                     ManagementObjectCollection moc2 = mc.GetInstances();
  80.                     foreach (ManagementObject mo in moc2)
  81.                     {
  82.                         if ((bool)mo["IPEnabled"] == true)
  83.                             MoAddress = mo["MacAddress"].ToString();
  84.                         mo.Dispose();
  85.                     }
  86.                 }
  87.                 return MoAddress;
  88.             }
  89.             catch (Exception ex)
  90.             {
  91.                 return null;
  92.             }
  93.         }

  94.         /// <summary>
  95.         /// 通过字符串获取MD5值,返回32位字符串。
  96.         /// </summary>
  97.         /// <param name="str"></param>
  98.         /// <returns></returns>
  99.         public static string GetMD5String(string text)
  100.         {
  101.             MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
  102.             byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(text));
  103.             StringBuilder sBuilder = new StringBuilder();
  104.             for (int i = 0; i < data.Length; i++)
  105.             {
  106.                 sBuilder.Append(data[i].ToString("x2"));
  107.             }
  108.             return sBuilder.ToString().ToLower();
  109.         }
  110.     }
复制代码


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-6-24 10:10:11 | 显示全部楼层
在获取硬盘Id的时候,还是有问题

如果,插入一个u盘,就会导致,获取的机器码不正确,下面的代码凑合着用吧

不获取带usb的硬盘id
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-6-24 10:28:51 | 显示全部楼层
应该是比较完美的解决方案如下:



参考资料:http://blog.csdn.net/breaksoftware/article/details/8821025
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-7 22:19:43 | 显示全部楼层
XUEXIYIXIA
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-5-28 09:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表