20 개의 임의 바이트 배열을 만드는 방법은 무엇입니까?


130

Java에서 20 개의 임의 바이트 배열을 어떻게 만들 수 있습니까?

답변:



46

타사 API를 사용하지 않고 암호로 강력한 난수 생성기 (스레드 안전)를 원할 경우 SecureRandom .

자바 6 & 7 :

SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);

Java 8 (보다 안전) :

byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);

16

이미 Apache Commons Lang을 사용하고 있다면 RandomUtils 이것을 한 줄짜리로 만듭니다.

byte[] randomBytes = RandomUtils.nextBytes(20);

8
약간의 파기를 한 후 RandomUtils는 SecureRandom이 아닌 후드 아래에서 Math.random ()을 사용합니다. 이것을 명시 적으로 만들고 싶었습니다.
Evo510

이 방법은 더 이상 존재하지 않습니다.
Martijn Hiemstra


@ DuncanJones Commons lang 3.7을 사용하는 Spring boot 2를 사용하고 있으며 제거되었습니다. 소스 코드를 보면 주석 처리 된 것으로 표시됩니다. 따라서 업그레이드로 인해 코드를 컴파일 할 수 없게되므로이 코드를 신뢰하지 않습니다.
Martijn Hiemstra

8

Java 7 은 현재 스레드와 격리 된 ThreadLocalRandom 을 도입했습니다. 됩니다.

이것은 maerics 솔루션의 또 다른 표현입니다 .

final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);

1
어쩌면 단어 뒤에 너무 많은 괄호가 ThreadLocalRandom있을까요? 더 나은 :ThreadLocalRandom.current().nextBytes(bytes);
Erwin Bolwidt

4

시드 로 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]);

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마우스 / 키보드 및 기타 소스에서 생성 된 더 많은 임의성을 기다리는 동안 사용 하고 차단 하기 때문 입니다. 두 번째 예는 /dev/urandom차단하지 않는 것을 사용합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.