別のコンピューターと交換できないようにファイルを暗号化するためのキーを生成するために使用されるハードウェアハッシュを生成したかったのです。これはライセンスの問題ではありません。アプリをオフラインで使用できるように、オンラインデータベースの一部のデータのバックアップコピーを保存する必要があります(ただし、アプリに含まれるデータはスヌーピングからかなり安全です)。以前、私は次のような(実際の)ネットワークアダプタの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();
これはかなりうまく機能しましたが、新しいコンピューターでワイヤレスをオフにすると2つのMACアドレス(1つは有線ネットワークカード用、もう1つはワイヤレス用)を取得し、ワイヤレスをオンにすると次のようになります。 3つ(前の2つとBluetoothの1つ!)、Bluetoothの1つを除外するための本当に明白な方法はわかりません(NetConnectionIDで「Bluetooth」を検索する以外)。
ここでは、非常に安定したハッシュは必要ありません。ハッシュが一致しない場合、アプリは暗号化されたデータをデコードできず、ネットワーク上にある場合は新しいコピーをダウンロードするため、それほど大きな問題ではありません(ネットワーク上にない場合は、現在利用できないことを伝えてください)。しかし、ワイヤレスのオンとオフを切り替えるだけでハッシュを変更できる場合は、明らかに十分に安定していません。
だから私の質問:
1)ネットワークアダプタの1つが突然消えて、元のハッシュから除外できるようにするためのより良い方法はありますか?
2)アダプターの順序は同じであることが保証されていますか?リストされている最初のアダプターは常に有線ネットワークカードですか?その場合は、最初のアダプターのみを使用するように制限します。
3)使用できるより良い、より安定したハッシュはありますか?または、適度に安定する組み合わせですか?
注:すでにEnvironment.MachineNameから自分のハッシュにマシン名をスローします。