0

我想生成一个硬件哈希,用于生成加密文件的密钥,这样它就不能与其他计算机交换。这不是许可证问题,它是从我们的在线数据库中存储一些数据的备份副本,以便可以离线使用该应用程序(但其中包含的数据相当安全,不会被窥探)。以前,我抓取了(真实)网络适配器的 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 中的机器名称添加到我的哈希中。

4

1 回答 1

1

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

您可以通过结合机器名称、处理器 ID 和主板 ID 创建更稳定的哈希。如果您只是将其用于本地识别,那应该足够强大。这篇 CodePlex 文章有一个很好的受支持硬件键列表。请让我知道,如果你有任何问题。

于 2012-08-27T21:09:55.927 回答