稳定的硬件哈希

时间:2012-08-27 20:55:50

标签: c# hash wmi hardware

我想生成一个硬件哈希,用于生成加密文件的密钥,以便不能与其他计算机交换。这不是许可证问题,而是存储来自我们的在线数据库的一些数据的备份副本,以便可以脱机使用该应用程序(但其中包含的数据相当安全,不受窥探)。以前,我抓住(真实)网络适配器的MAC地址,如下所示:

ManagementClass mng = new ManagementClass("Win32_NetworkAdapter");
ManagementObjectCollection apts = mng.GetInstances();
IEnumerable<string> macs = from ManagementObject mo in apts
                           where mo["MacAddress"] != null && mo["NetConnectionStatus"] != null
                           select mo["MacAddress"].ToString();

这种方法运行得相当不错,除了现在我发现有一台新电脑,当无线关闭时,我得到两个MAC地址(一个用于有线网卡,一个用于无线),当我开启无线时,我得到三个(前两个,加上蓝牙一个!),我没有看到任何明显的方法来过滤蓝牙一个(没有在NetConnectionID中搜索“蓝牙”)。

现在我不需要超稳定哈希。如果哈希不匹配,那么应用程序无法对加密数据进行解码,并且如果在网络上则会下载新的副本,所以这不是什么大不了的事(如果你不在网络上,它会只是告诉你它现在不可用)。但是,如果打开和关闭无线网络足以改变我的哈希值,那么它显然不够稳定!

所以我的问题:

1)有没有更好的方法来判断其中一个网络适配器是否可能突然消失,以便将其从原始哈希中排除?

2)适配器的顺序是否保证相同?列出的第一个适配器是否始终是有线网卡?如果是这种情况,也许我只会将其限制为只使用第一个适配器。

3)我可以使用更好,更稳定的哈希吗?或者是一个相当稳定的组合?

注意:我也已将Environment.MachineName中的机器名称输入到我的哈希值。

1 个答案:

答案 0 :(得分:1)

我不知道1或2的答案,但这是一个潜在的解决方法:

您可以通过组合机器名称,processorID和&amp ;;来创建更稳定的哈希值。 motherboardID。如果你只是用它来进行本地识别,那应该足够强大。 This CodePlex article有一个很好的受支持硬件密钥列表。如果您有任何问题,请与我们联系。