Javaで暗号化を作成したい。
とにかく、CPU ID や、BIOS などの PC で一意のものを取得する方法はありますか ...
たとえばSystem.getCpuId();
、それは単なる例です
どうもありがとう ...
Javaで暗号化を作成したい。
とにかく、CPU ID や、BIOS などの PC で一意のものを取得する方法はありますか ...
たとえばSystem.getCpuId();
、それは単なる例です
どうもありがとう ...
ユーザーのコンピュータを識別する一意の番号 (または文字列?) が必要ですか? または、少なくとも重複の可能性が非常に低いほど十分にユニークですよね?
ネットワーク インターフェイスの Mac アドレスを取得できます。これは多くの仮定を立てていますが、あなたのニーズには十分かもしれません:
final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));
これにより、バイト配列が得られます。それをいくつかの方法でIDに変換できます... 16進文字列など。
ただし、人々がコンピューターのハードウェアの一部を交換する場合は、サポートを期待してください。
このような OS 固有のコマンドは、Java では使用できないと思います。
このリンクは、Windows で実行する方法を示しています。
Pure Java でハードウェア情報を (確実に) 取得することはできません。JNAまたはJNIを使用する必要があります。構築している暗号化システムの種類と、ハードウェア情報が必要な理由を明確にしていただけますか?
編集: Steve McLeod は、Java にはNetworkInterface.getHardwareAddress()メソッドがあることに注目しました。ただし、すべての Java 実装でアクセスが許可されているわけではなく、MAC アドレスは簡単に偽造される可能性があるなど、重大な注意事項があります。
また、マシンが複数のCPU / NIC /何でも、したがって複数のIDを持つことができることを考慮する必要があります。
一意の 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
JNA/JNI ライブラリがなければ、Java でハードウェア情報を直接取得する方法はありません。とはいえ、 を使用すると、 「やや一意のシステム固有の値」を取得できSystem.getEnv()
ます。例えば、
System.getEnv("COMPUTERNAME")
Windows システムでコンピュータの名前を返す必要があります。もちろん、これは非常に移植性がありません。また、値は同じシステム内で時間とともに変化する可能性があります。または、異なるシステムで同じであること。しかたがない...
あなたが本当に探しているのは優れたエントロピー ソースですが、Java 暗号化アーキテクチャはこのためのフレームワークを提供するため、実際のアルゴリズムに集中できるため、Java 暗号化アーキテクチャを調査することをお勧めします。
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html