ユーザーログインデータなどを維持するために、暗号化されたオブジェクトのマップをファイルにシリアル化するクラスを作成しています。
アイデアは、同じマシン上でこのクラスを使用してデータを常に回復および復号化できるようにすることです。他のマシン。
この目的のために (この SO 投稿および他の記事で提案されているように)、ネットワーク インターフェイスのハードウェア アドレスを反復処理しながら、それらを使用して既定の定数キーをハッシュしています。
byte[] key = getConstKey();
Enumeration<NetworkInterface> inters = networkInterface.getNetworkInterfaces();
while (inters.hasMoreElements()) {
NetworkInterface inter = inters.nextElement();
if (inter.getHardwareAddress() == null) {
continue;
}
hashKeyAccordingToAddress(key, inter.getHardwareAddress());
}
これはうまく機能し、すべてのテストに合格しましたが、ある日ラップトップをオフィスから持ち出すまで...
どうやら、一部のネットワーク アドレスが変更されたか、ネットワークを変更したときにインターフェイスが追加または削除されたようです。私の仮定は、実際のハードウェアの変更のみが生成されたキーを変更するというものでした。私は間違っていたと思います。
NetworkInterface
より安定する傾向がある特定の s のみを使用するなど、これをより堅牢にする方法はありますか? または、マシン固有の永続キーを生成するより良い方法はありますか?
更新: より具体的に言うと、オフィスの外から VPN サービスに接続したときに問題が発生します。ログインの詳細の一部は、この VPN を介してサービスに接続するために使用されるため、私のソリューションは役に立たなくなります..