我想生成一個硬件散列,用於生成密鑰來加密文件,以便它不能與另一臺計算機交換。這不是一個許可證問題,它是從我們的在線數據庫中存儲一些數據的備份副本,以便應用程序可以脫機使用(但其中包含的數據相當安全,不會被窺探)。此前,我抓住的(真正)網絡適配器這樣的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中搜索「Bluetooth」不足)。
現在我不需要超穩定的散列在這裏。如果哈希不匹配,那麼應用程序無法解碼加密的數據,並會在網絡上下載新的副本,所以這不是什麼大問題(如果您不在網絡中,它會只是告訴你它現在不可用)。但如果打開和關閉無線電足以改變我的散列,那麼它顯然不夠穩定!
所以我的問題:
1)是否有更好的方式來告訴大家,一個網絡適配器可能會突然消失,所以我可以從原來的哈希排除呢?
2)適配器的順序是否保證相同?列出的第一個適配器是否始終是有線網卡?如果是這種情況,也許我會限制它只使用第一個適配器。
3)我可以使用更好,更穩定的散列嗎?或者相當穩定的組合?
注意:我也從機器名稱Environment.MachineName到我的散列已經。
生成一個隨機數並將其存儲在一個文件中。 –
沒有關於該mac地址的真實情況,它所做的只是讀取註冊表。不穩定是令人不快的,安全漏洞是不可接受的。使用公鑰/私鑰或其他值得實際編碼的東西。 –
@HansPassant:但是移動這兩個文件將允許它在另一臺計算機上工作,這是我試圖防止的情況。 –