从PC获取唯一的硬件ID
我试图从我的PC上获取硬盘和主板序列号。它适用于Windows 7及以上版本从PC获取唯一的硬件ID
但是,CMD中的相同代码不适用于Windows XP。它显示OEM来填充或返回无
wmic diskdrive get name,serialnumber,model // This is cmd to get serial num
在Windows XP中返回错误的SERIALNUMBER
wmic baseboard get product,Manufacturer,version,serialnumber // This is cmd to get MotherBoard serialnumber
在Windows XP和Win 8也回报在SERIALNUMBER错误,如“要填写通过OEM“
我正在寻找最佳个人电脑唯一身份证,它可以返回任何操作系统的ID或序列号,应该是唯一的..
请帮帮我
谢谢。
我发现了一个小项目在网上,他们得到:
- 处理器ID
- 主板ID
- 卷序列号
- MAC地址ID
然后,他们散列它通过MD5但它现在被折旧,所以最好的办法是做同样的事情,并散列它通过^ h SHA512
首先,您需要导入和参考,如果没有自动完成:
Imports System.Management
Imports System.Security.Cryptography
Imports System.Text
然后函数获得HWID(硬件ID)
Public Function Get_HWID() As String
'Information Handler
Dim hw As New clsComputerInfo
'Decalre variables
Dim hdd, cpu, mb, mac As String
'Get all the values
cpu = hw.GetProcessorId()
hdd = hw.GetVolumeSerial("C")
mb = hw.GetMotherBoardID()
mac = hw.GetMACAddress()
'Generate the hash
Dim hwid As String = GenerateSHA512String(cpu & hdd & mb & mac)
Return hwid
End Function
函数生成散列:
Public Shared Function GenerateSHA512String(ByVal inputString) As String
Dim sha512 As SHA512 = SHA512Managed.Create()
Dim bytes As Byte() = Encoding.UTF8.GetBytes(inputString)
Dim hash As Byte() = sha512.ComputeHash(bytes)
Dim stringBuilder As New StringBuilder()
For i As Integer = 0 To hash.Length - 1
stringBuilder.Append(hash(i).ToString("X2"))
Next
Return stringBuilder.ToString()
End Function
最后Class获取信息息:
Public Class clsComputerInfo
Friend Function GetProcessorId() As String
Dim strProcessorId As String = String.Empty
Dim query As New SelectQuery("Win32_processor")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject
For Each info In search.Get()
strProcessorId = info("processorId").ToString()
Next
Return strProcessorId
End Function
Friend Function GetMACAddress() As String
Dim mc As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
Dim MACAddress As String = String.Empty
For Each mo As ManagementObject In moc
If (MACAddress.Equals(String.Empty)) Then
If CBool(mo("IPEnabled")) Then MACAddress = mo("MacAddress").ToString()
mo.Dispose()
End If
MACAddress = MACAddress.Replace(":", String.Empty)
Next
Return MACAddress
End Function
Friend Function GetVolumeSerial(Optional ByVal strDriveLetter As String = "C") As String
Dim disk As ManagementObject = New ManagementObject(String.Format("win32_logicaldisk.deviceid=""{0}:""", strDriveLetter))
disk.Get()
Return disk("VolumeSerialNumber").ToString()
End Function
Friend Function GetMotherBoardID() As String
Dim strMotherBoardID As String = String.Empty
Dim query As New SelectQuery("Win32_BaseBoard")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject
For Each info In search.Get()
strMotherBoardID = info("SerialNumber").ToString()
Next
Return strMotherBoardID
End Function
End Class
我回顾this project
希望的代码,这可以帮助你,请记得添加引用管理
更多信息:
最常见的ID用于HWID的是:CPU ID和MAC addre基于SS的硬件ID和硬盘序列号
HWID不建议作为一个发牌系统,因为它是不准确的和不实际的,如果用户改变计算机或格式建议它更使用的驱动器等证书系统或更复杂的认证。
试过你的代码...处理器ID是在一些PC上是常见的.....所以它失败了,对于MAC地址PC需要网络适配器,所以它失败了,当我试图让主板serialnumber ........它不适用于win 8 –
您是否添加了引用** ....并且您不明白我们将所有值合并为一个ID,因为没有计算机将这四个值相加在一起... 。我在Windows 8上,它工作正常。尝试了解代码而不是**复制粘贴** – Mederic
我需要它的Windows XP ..让我试试并通知.... –
你需要什么?这是用于许可功能,还是仅仅是一个唯一的客户端ID?是否需要在操作系统升级或擦除时保持一致?它需要防篡改吗? –