我正在使用 C# 和 .NET 2.0。我的应用程序需要某种方法来检查不同的用户,所以我将使用硬件 ID,但我发现我只能使用:

  • mac 地址 - 很容易改变,但不是每个人都有它 // 没有
  • 处理器 id - 使用 WMI 它返回 cpu 型号的值,它不是唯一的 // 否
  • 主板序列号 - 并非每个主板都有它 // 否
  • Windows 的卷序列 - 我不确定 Windows 重新安装和卷格式是否会更改

那么还有什么我没有提到的 hwid 吗?我想要每个人都拥有的东西,并且它不会在 Windows 重新安装时被删除。否则我就必须使用 Windows 的卷序列号。


编辑:根据评论,我认为最好使用 HDD id。如何获得?编辑2:我刚刚读到 SCSI 驱动器没有串行端口。真的吗?

最终编辑:我已经在我的应用程序上使用根驱动器序列号。效果非常好。谢谢大家。

有帮助吗?

解决方案

硬盘序列号:独一无二,不可改变,每个人都拥有。

这不是一个完美的选择,但是...

其他提示

好吧,我会选择多个 id。如果您组合足够多的 ID,它们将为您带来足够的唯一性。

编辑:你也可以去硬盘上你的程序也安装的地方(Platter,Cylinder等)

为什么要使用硬件ID?我自己会选择某种基于表单(或基于 AD)的安全性。

然而鉴于此:HWID 的特点是它标识特定的计算机配置:如果系统发生变化,它就会发生变化。您提到 Windows 卷序列号可能会在重新安装和重新格式化时发生变化,但是此时您的软件是否也必须重新安装?例如,如果用户出于某种原因更换硬盘,硬盘串行也可能会发生变化。

如果您必须使用 HWID,您可能需要选择一个(或多个)可用选项来提供唯一性,并进行编码或通知用户需要重新安装和/或重新配置软件的硬件更改。

MAC 地址不太可靠。您应该使用无法更改的内容,例如 CPU ID 或 HDD IDE ID。

我的意思是:
http://www.soft.tahionic.com/download-hdd_id/index.html
http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html


回答你的问题,是的,SCSI 没有硬件 ID。

您是否必须考虑安全性或仅考虑可靠性,即用户是否想要篡改您的身份检查?如果您需要(高)安全性,请购买一种“软件保护”产品,这比自己动手便宜得多。

安全性要求不高?=> 另一种可能性是使用用户或计算机 SID。您必须考虑到您的应用程序是在 elevated => 用户是管理员的情况下执行的。

最后但并非最不重要的:将一些字节的随机值写入 HKEY_CURRENT_USER 下的注册表(可能在各个位置),并将它们用作 ID。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top