Como posso criar uma matriz de 20 bytes aleatórios em Java?
130
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 .
fonte
ThreadLocalRandom
? Melhor:ThreadLocalRandom.current().nextBytes(bytes);
Crie um objeto Random com uma semente e obtenha a matriz aleatoriamente, fazendo:
fonte
Para aqueles que desejam uma maneira mais segura de criar uma matriz de bytes aleatória, sim, a maneira mais segura é:
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:
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.fonte