Javaでランダムな20バイトの配列を作成するにはどうすればよいですか?
Javaでランダムな20バイトの配列を作成するにはどうすればよいですか?
回答:
Random.nextBytes
メソッドを試してください:
byte[] b = new byte[20];
new Random().nextBytes(b);
すでにApache Commons Langを使用している場合、 RandomUtils
これにより1行になります。
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7では、現在のスレッドに分離されたThreadLocalRandomが導入されました。
これは、maericsのソリューションの別の表現です。
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
ますか?より良い:ThreadLocalRandom.current().nextBytes(bytes);
シードでRandomオブジェクトを作成し、次のようにして配列をランダムに取得します。
public static final int ARRAY_LENGTH = 20;
byte[] byteArray = new byte[ARRAY_LENGTH];
new Random(System.currentTimeMillis()).nextBytes(byteArray);
// get fisrt element
System.out.println("Random byte: " + byteArray[0]);
ランダムなバイト配列を作成するより安全な方法が必要な場合、はい、最も安全な方法は次のとおりです。
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
ただし、OSによっては、マシンで使用できるランダム性が十分でない場合、スレッドがブロックする可能性があります。次のソリューションはブロックしません:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
これは、最初の例では/dev/random
(マウス/キーボードおよびその他のソースによって生成された)より多くのランダム性を待っている間にブロックして使用するためです。2番目の例/dev/urandom
では、ブロックしないwhichを使用しています。