从PC获取唯一的硬件ID

ram*_*nar -1 vb.net cmd command-prompt vb.net-2010

我尝试从PC上获取硬盘和主板序列号。在Windows 7及更高版本中效果很好

但是CMD中的相同代码不适用于Windows XP。显示OEM已满或什么也没有退货

wmic diskdrive get name,serialnumber,model // This is cmd to get serial num
Run Code Online (Sandbox Code Playgroud)

在Windows XP中,它返回序列号错误

wmic baseboard get product,Manufacturer,version,serialnumber // This is cmd to get MotherBoard serialnumber
Run Code Online (Sandbox Code Playgroud)

在Windows XP和Win 8中,它返回序列号错误,例如“ 由OEM填充

我正在寻找Best Pc Unique Id,它可以为任何操作系统返回ID或序列号,并且应该是唯一的。

请帮我

谢谢。

Med*_*ric 5

我在网上找到了一个小项目,他们得到了:

  • 处理器ID
  • 主板ID
  • 卷序列号
  • Mac地址ID

然后,他们通过MD5对其进行哈希处理,但现在已贬值,因此最好的选择是这样做,并通过Sha512对其进行哈希处理

首先,您需要导入并引用(如果未自动完成):

Imports System.Management
Imports System.Security.Cryptography
Imports System.Text
Run Code Online (Sandbox Code Playgroud)

然后该函数获取HWID(HardwareID)

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
Run Code Online (Sandbox Code Playgroud)

生成哈希的函数:

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
Run Code Online (Sandbox Code Playgroud)

最后是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
Run Code Online (Sandbox Code Playgroud)

我查看了该项目的代码

希望这可以为您提供帮助,请记住将引用添加到“ 管理”中

更多信息:

用于HWID的最常见ID为:CPU ID基于MAC地址的硬件ID硬盘序列号

不建议将HWID用作许可系​​统,因为它不准确,如果用户更换计算机或格式化驱动器等也不实用。建议使用证书系统或更复杂的身份验证。