Jak mogę utworzyć tablicę 20 losowych bajtów w Javie?
Jak mogę utworzyć tablicę 20 losowych bajtów w Javie?
Odpowiedzi:
Wypróbuj Random.nextBytes
metodę:
byte[] b = new byte[20];
new Random().nextBytes(b);
Jeśli chcesz mieć silny kryptograficznie generator liczb losowych (również bezpieczny wątkowo) bez korzystania z interfejsu API innej firmy, możesz użyć SecureRandom
.
Java 6 i 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (jeszcze bezpieczniejsza):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Jeśli korzystasz już z Apache Commons Lang, to RandomUtils
sprawia , że jest to jedna linijka:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 wprowadziła ThreadLocalRandom, który jest odizolowany od bieżącego wątku .
To kolejna interpretacja rozwiązania Maerics .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Lepiej:ThreadLocalRandom.current().nextBytes(bytes);
Utwórz obiekt Random z ziarnem i uzyskaj tablicę losowo, wykonując:
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]);
Dla tych, którzy chcą bezpieczniejszego sposobu tworzenia losowej tablicy bajtów, tak, najbezpieczniejszym sposobem jest:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
ALE twoje wątki mogą blokować się, jeśli na komputerze nie ma wystarczającej ilości losowości, w zależności od systemu operacyjnego. Poniższe rozwiązanie nie będzie blokować:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Dzieje się tak, ponieważ pierwszy przykład używa /dev/random
i będzie blokował podczas oczekiwania na większą losowość (generowaną przez mysz / klawiaturę i inne źródła). Drugi przykład używa, /dev/urandom
które nie będą blokować.