1

私は(Javaで)アプリケーションを構築していますが、そのパフォーマンスの測定値を自分自身に提供したいと思います。タイミングを計っている長時間実行プロセスが複数あり、メトリックを受信するために使用するWebサーバーがありますが、特定のユーザーに固有の番号を作成したいと思います(私のプログラムはログイン)コンピュータに。

したがって、ジョーがコンピューターAにログオンして私のアプリケーションを実行すると、1234のような一意の番号が与えられます。ジェーンが同じコンピューターにログオンした場合は、4321などの別の番号が使用されます。ただし、ジョーがコンピューターにログオンした場合B、それは完全に別の番号、たとえば5678を作成します。また(明確にするために)ジョーがコンピューターAに再度ログオンした場合でも、番号1234が生成されます。

また、もっとやりがいのあることですが、同じコンピューターが別のネットワーク上にある場合は、別のIDが必要です。

これらの数値は任意であり、これより長くなります。これまでの私のコードは、次の場所8akb7d3n7lp1i1jo6apfhegp593kja5hg38b6o1a5godm38g97omm7bmc3jekc6apopgjhf9gからUIDとして生成されます。

try {
    byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
    String names = new BigInteger(mac).toString(16) + InetAddress.getLocalHost().getHostAddress() + get("user.name") + get("os.version") + get("java.vendor");
    BigInteger uid = new BigInteger(names.getBytes());
    thisUsersUid = uid.toString(26);
} catch (SocketException ex) {
    Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnknownHostException ex) {
    Logger.getLogger(TimingLogger.class.getName()).log(Level.SEVERE, null, ex);
}

この情報を簡単に読み取れるようにしたくないので(ご存知かもしれませんがnames="-f4b86eb8ee1192.168.0.20lee10.6.8Apple Inc.")、それにハッシュ関数を追加します。

だから私の質問は、結局のところ、この宣伝文句は次のとおりです:これはそれを行うための良い方法ですか?これよりも優れた仕事をすることができる図書館はありますか?それとも私はただ欲しすぎているのでしょうか?

事前に感謝します(「なぜ?」というコメントでも)

4

3 に答える 3

4

UUIDを使用できます。

Javaの場合:UUID id = UUID.randomUUID();

于 2012-06-17T01:07:48.877 に答える
3

あなたの質問は完全には明確ではないので、いくつかの仮定を述べます。

  • アプリケーションはユーザーのPCにインストールされます。(サンドボックスによってアクセスが制限されているのは、アプレットなどではありません。)
  • UIDは、サーバーではなく、ユーザーのコンピューターで実行されているアプリケーションによって生成されます。
  • UIDからユーザーの名前とマシンIDを回復できる必要はありません。つまり、それは単なる不透明な識別子です。
  • ソリューションは安全である必要はありません。(ユーザーが同じマシン上でさまざまなUIDをいじって生成することにした場合、それは実際には問題ではありません。)

もしそうなら、ここにいくつかのオプションがあります。

  • 初めてアプリケーションを実行するときは、ランダムなUUIDを生成し、それをユーザーのホームディレクトリや設定などに保存します。その後、アプリケーションによって保存されていた場所で既存のUUIDを探します。

  • ユーザーのアカウント名とマシンのMACアドレスのMD5(または同様の)ハッシュとしてUIDを生成します。これは、再起動しても安定しているはずです...ユーザーのPCの実装方法に何か奇妙なことがない限り。

(セキュリティが主な関心事である場合、最初のアプローチはオンではありません-ユーザーが保存されたUUIDを見つけて削除できると想定する必要があります。2番目のアプローチでは、ユーザーが自分のアカウント名を偽装したり変更したりする可能性があるという問題がありますPCのMACアドレスどのスキームでも、ユーザーのPCにインストールまたは実行されているソフトウェアがハッキングされて、UIDがユーザーが望むものに置き換えられる可能性があるという、より大きな問題があります。ユーザーがハッカーのスキルとモチベーションを持っている場合は戦います。)


これよりも優れた仕事をすることができる図書館はありますか?それとも私はただ欲しすぎているのでしょうか?

私はこれを行う既存のライブラリを知りません。

于 2012-06-17T01:29:15.443 に答える
1

これは、優れた暗号化ハッシュ関数の優れたアプリケーションです。最新技術は SHA-2 です。行ったように、すべての独立した数量を連結して、繰り返し可能な方法で文字列を作成し、これをハッシュに通して 256 ビット (32 バイト) の値を取得します。

OS と Java ベンダーを含めるという選択は、定期的なアップグレードや変更によって新しい ID が生成される可能性があることを意味するため、奇妙に思えます。あなたが与えた基準に基づいて、MAC、IP、およびユーザー名が最適な組み合わせのようです。

于 2012-06-17T01:24:43.180 に答える