9

Javaで暗号化を作成したい。
とにかく、CPU ID や、BIOS などの PC で一意のものを取得する方法はありますか ...

たとえばSystem.getCpuId();、それは単なる例です

どうもありがとう ...

4

7 に答える 7

5

ユーザーのコンピュータを識別する一意の番号 (または文字列?) が必要ですか? または、少なくとも重複の可能性が非常に低いほど十分にユニークですよね?

ネットワーク インターフェイスの Mac アドレスを取得できます。これは多くの仮定を立てていますが、あなたのニーズには十分かもしれません:

final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));

これにより、バイト配列が得られます。それをいくつかの方法でIDに変換できます... 16進文字列など。

ただし、人々がコンピューターのハードウェアの一部を交換する場合は、サポートを期待してください。

于 2010-02-05T11:34:26.203 に答える
4

このような OS 固有のコマンドは、Java では使用できないと思います。

このリンクは、Windows で実行する方法を示しています。

于 2010-02-05T11:20:10.470 に答える
3

Pure Java でハードウェア情報を (確実に) 取得することはできません。JNAまたはJNIを使用する必要があります。構築している暗号化システムの種類と、ハードウェア情報が必要な理由を明確にしていただけますか?

編集: Steve McLeod は、Java にはNetworkInterface.getHardwareAddress()メソッドがあることに注目しました。ただし、すべての Java 実装でアクセスが許可されているわけではなく、MAC アドレスは簡単に偽造される可能性があるなど、重大な注意事項があります。

于 2010-02-05T11:18:03.797 に答える
2

また、マシンが複数のCPU / NIC /何でも、したがって複数のIDを持つことができることを考慮する必要があります。

于 2010-02-05T12:03:05.310 に答える
1

一意の ID が必要な場合は、UUIDを使用できます。

import java.util.UUID;

public class GenerateUUID {


      public static final void main(String... aArgs){
        //generate random UUIDs
        UUID idOne = UUID.randomUUID();
        UUID idTwo = UUID.randomUUID();
        log("UUID One: " + idOne);
        log("UUID Two: " + idTwo);
      }

      private static void log(Object aObject){
        System.out.println( String.valueOf(aObject) );
      }
    } 

実行例:

>java -cp . GenerateUUID
UUID One: 067e6162-3b6f-4ae2-a171-2470b63dff00 
UUID Two: 54947df8-0e9e-4471-a2f9-9af509fb5889
于 2010-02-05T11:19:41.183 に答える
1

JNA/JNI ライブラリがなければ、Java でハードウェア情報を直接取得する方法はありません。とはいえ、 を使用すると、 「やや一意のシステム固有の値」を取得できSystem.getEnv()ます。例えば、

System.getEnv("COMPUTERNAME")

Windows システムでコンピュータの名前を返す必要があります。もちろん、これは非常に移植性がありません。また、値は同じシステム内で時間とともに変化する可能性があります。または、異なるシステムで同じであること。しかたがない...

于 2010-02-05T11:22:37.993 に答える
0

あなたが本当に探しているのは優れたエントロピー ソースですが、Java 暗号化アーキテクチャはこのためのフレームワークを提供するため、実際のアルゴリズムに集中できるため、Java 暗号化アーキテクチャを調査することをお勧めします。

http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html

于 2010-02-05T11:22:59.193 に答える