C# 机器的唯一ID应该是什么?它的主板ID?Windows产品ID?

C# 机器的唯一ID应该是什么?它的主板ID?Windows产品ID?,c#,.net,unique-key,C#,.net,Unique Key,我想检索机器的唯一ID 和其他人一样,我也做了很多研究,发现唯一ID生成过程中没有一个是完美的 对于主板序列号(ID):它是唯一的;这是无法改变的。然而,如果制造商没有将信息放在内存位置上,可能在某些机器上找不到。然后我发现它没有唯一的Id。。哈哈 类似于“处理器ID”、“BIOS ID” 害怕使用PC的其他硬件信息 MAC和Windows产品ID可以通过软件更改 “Windows产品ID”是否唯一 有一种方法可以将这些组合起来,但如果应用上述条件,组合不是唯一的,该怎么办 还有其他方法可以找到

我想检索机器的唯一ID

和其他人一样,我也做了很多研究,发现唯一ID生成过程中没有一个是完美的

对于主板序列号(ID):它是唯一的;这是无法改变的。然而,如果制造商没有将信息放在内存位置上,可能在某些机器上找不到。然后我发现它没有唯一的Id。。哈哈

类似于“处理器ID”、“BIOS ID”

害怕使用PC的其他硬件信息

MAC和Windows产品ID可以通过软件更改

“Windows产品ID”是否唯一

有一种方法可以将这些组合起来,但如果应用上述条件,组合不是唯一的,该怎么办

还有其他方法可以找到机器的唯一ID吗


编辑: 我想基于该唯一ID生成串行密钥,以保护软件盗版。 机器意味着目标PC我必须安装软件。 @古格:谢谢你的提醒

机器的唯一ID

正如您所发现的,没有“机器的唯一ID”这样的东西

您需要定义您的需求,并使用满足这些需求的ID(可能是您自己分配的)。例如,对于web应用程序,具有GUID的cookie可能足以区分其他匿名用户(可以忽略使用多个浏览器或“私人”模式的少数用户)

对于系统管理,在系统级别分配GUID应该足够了(无论如何,需要单独跟踪具有多个引导的多个操作系统安装)


因为这些ID中的一些可能丢失了,用户可以调出您需要的组件来确定“机器”的含义

例如,我会查看主板id、处理器id和bios id,因为它们是最不可能更改的。然后我会查找所有三个,并允许其中一个自上次以来丢失和/或更改。如果满足这些条件,则允许软件运行


如果两个甚至三个都不见了你会怎么办我不知道因为正如你所说,诸如MAC地址之类的其他内容可以通过软件更改,而硬盘ID可能不是唯一的,并且可能会发生更频繁的更改。

如果您在计算机所有者有意绕过您的唯一检查的情况下试图跟踪唯一的计算机,例如,一个免费的电脑游戏,每个玩家只需要一个帐户,我见过上面提到的类似方法,但使用了一些加密

收集或尝试收集几条相对稳定的PC信息(主板ID/MAC地址/BIOS),将它们与salt前缀组合,然后使用简单的免费算法对其进行加密。该密钥是您为该玩家存储的密钥及其用户ID,类似于加密密码的方式。该密钥将是“机器”的一个非常好的唯一标识符,您可以在每次登录时检查它


根据你想从更换部件的普通人那里得到的风险大小,你可以得到几条计算机信息,但只要你检查的东西没有空白,你就应该很安全

我认为最好也说明一下你识别机器的目的。还有,你说的“机器”到底是什么意思?如果你有一个虚拟机呢?一个虚拟机与同一硬件上的不同虚拟机是否是唯一的?如果您的虚拟机被转移到另一个硬件怎么办?还是复制?你能以证书的形式分配唯一的ID吗?你看过这个问题吗?我知道可以从BIOS启用/禁用ID。这是真的吗?如果是,怎么做?另一个是: