Como posso criar uma matriz de 20 bytes aleatórios em Java?
Como posso criar uma matriz de 20 bytes aleatórios em Java?
Respostas:
Experimente o Random.nextBytes
método:
byte[] b = new byte[20];
new Random().nextBytes(b);
Se você quiser um gerador de números aleatórios com criptografia forte (também seguro para threads) sem usar uma API de terceiros, poderá usar SecureRandom
.
Java 6 e 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (ainda mais seguro):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Se você já estiver usando o Apache Commons Lang, RandomUtils
isso tornará a linha única:
byte[] randomBytes = RandomUtils.nextBytes(20);
O Java 7 introduziu o ThreadLocalRandom, que é isolado no encadeamento atual .
Esta é uma outra versão da solução dos maerics .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Melhor:ThreadLocalRandom.current().nextBytes(bytes);
Crie um objeto Random com uma semente e obtenha a matriz aleatoriamente, fazendo:
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]);
Para aqueles que desejam uma maneira mais segura de criar uma matriz de bytes aleatória, sim, a maneira mais segura é:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
MAS seus encadeamentos podem bloquear se não houver aleatoriedade suficiente disponível na máquina, dependendo do sistema operacional. A seguinte solução não será bloqueada:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Isso ocorre porque o primeiro exemplo usa /dev/random
e bloqueará enquanto aguarda mais aleatoriedade (gerada por um mouse / teclado e outras fontes). O segundo exemplo usa /dev/urandom
que não será bloqueado.