質問

可能な複製:
一意のハードウェアIDを生成する信頼できる方法

特定のコンピューターに固有のIDを生成しようとしています。 IDはランダムに生成されません。コンピューターA用に生成されたIDがCOMPUTER Aに固定され、コンピューターAに固有のものになるように計算ベースになります。プログラムがコンピューターAで実行されるたびに、同じIDが生成され続け、別のコンピューターで実行されると生成されますそのコンピューターに固有の別のID。これは、2つのコンピューターに同じIDがないことを確認するためです。

私の挑戦: 私のプログラムがコンピューターに固有のIDを生成できるようにするには、それを実行するコンピューターに固有の種子に基づいて計算を実行する必要があります。

私の質問: ID生成プログラムのシードとして値を使用できるように、コンピューターに固有の値を取得するにはどうすればよいですか?

そのコンピューターに固有のコンピューターのハードウェア(マザーボードなど)から値を取得することは可能ですか?そうすれば、コンピューターのマザーボードが交換されない限り、値は変更されない可能性が最も高くなります。

役に立ちましたか?

解決

Macアドレス?それは(実用的な目的で) すべてのNICに固有 したがって、ユーザーがデュアルブートであっても、再現性を保証します。確かに、人々がカードを取引することはまれですが、 他のメトリックと相まって (ネットワークカードを変更できるため、これを使用しないでください)、それでも可能です。

どうやって手に入れますか?

public static byte[] getMACAddress() throws SocketException, UnknownHostException {
    InetAddress address = InetAddress.getLocalHost();
    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);

    return networkInterface.getHardwareAddress();
}

文字列表現が必要な場合は、これを行います

for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
    System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}

(ありがとう http://www.kodejava.org/examples/250.html)

ノート: コメントで述べたように、MACアドレスはスプーフィングできます。しかし、あなたがこれを行っている人口のごく一部について話していること、そしてあなたがこれを著作権侵害防止のために使用しない限り、それは十分にユニークです。

他のヒント

Win32はコンピューターSIDを生成します。これは、WMIまたはActive Directoryを介して取得できるインストールごとにユニークであることになっていますが、プラットフォーム固有です。 Macアドレスを使用することもできます。他のすべての人が言及しているように、仮想アダプターがコンピューター間で同じMacアドレスを共有する傾向があるため、物理ネットワークアダプターであることを確認してください。

ただし、UUID(またはGUID)は、一意であることを保証することになっている128ビット番号であり、実際には複数のランダムマシンで一意の識別子を生成する問題を解決する目的で作成されました。ウィキペディアによると:

これらの数字を視野に入れるために、met石に打撃を受ける年間のリスクは170億人に1つのチャンスと推定されます[25]。つまり、確率は約0.00000000006(6×10-11)であり、作成の可能性に相当します。 1年に数兆個のuuidと1つの重複があります。言い換えれば、今後100年間に毎秒10億UUIDを生成した後にのみ、1つの重複しか作成されない確率は約50%になります。 1つの重複の確率は、地球上のすべての人が6億UUIDを所有している場合、約50%になります。

考えられる組み合わせの総数は2^128(または3 x 10^38)なので、私はそれを信じる傾向があります。また、ほとんどの最新のUUIDジェネレーターは、GUIDがいつ生成され、誰がそれを生成したかがわかります。 。 Win32 Worldでは、Win2KまたはNT 4に変更されたセキュリティパッチが変更され、AlgorithmのV4バージョンを使用します。これは、Macの代わりに擬似ランダム数に基づいており、JVMは常にV3/V4バージョンを使用しています。

編集:JavaでUUIDを生成するために使用される方法は、java.util.uuidクラスを介して行われます。

これを行う簡単な方法は、イーサネットハードウェアまたは「Mac」アドレスを読むことです。

http://download.oracle.com/javase/6/docs/api/java/net/networkinterface.html#gethardwareaddress()

Macアドレスは、時間が経つにつれて再利用されるため、人々が考えるほどユニークではありません。しかし、2つの同一のアプリケーションを持つ1つのアプリケーションまたはネットワークのオッズは非常に低いです。

Macアドレスは、あなたのために十分にユニークです。見る http://en.wikipedia.org/wiki/mac_address

使用している言語を指定しませんでした。一部の言語では他の言語よりも簡単な場合があります。 Javaでそれを行う方法は次のとおりです http://www.kodejava.org/examples/250.html. 。あなたの言語のためにグーグル周辺。

最良のオプションは、IDをプライマリネットワークアダプターのMACアドレスに基づいてベースにすることです。

これは潜在的に何らかのポイントで変化する可能性が高いですが、単一のハードコンポーネントもそうです。

FYIガイドは、MACアドレスを使用して計算されます。

この記事で説明されている情報にアクセスしましたか? Windowsのみ

http://msdn.microsoft.com/en-us/library/aa394587.aspx

シリアル番号、資産タグ

Intelチップを使用している場合、別のオプションは、機能が有効になることを確認できると仮定して、プロセッサシリアル番号です。見る Intelシリアル#注 詳細については

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top