Skip to content

Instantly share code, notes, and snippets.

@DiegoQueiroz
Last active July 22, 2020 20:30
Show Gist options
  • Save DiegoQueiroz/dd2f72144b7e5194f85952bad45bb6fe to your computer and use it in GitHub Desktop.
Save DiegoQueiroz/dd2f72144b7e5194f85952bad45bb6fe to your computer and use it in GitHub Desktop.
Sequência de dígitos aleatórios em Java, utilizando SecureRandom
import java.security.SecureRandom;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(GeraDigitosAleatorios(8));
}
public static String GeraDigitosAleatorios(int tamanho){
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[tamanho];
random.nextBytes(bytes);
StringBuilder sequencia = new StringBuilder();
for (int i = 0; i < tamanho; i++){
sequencia.append((bytes[i] - Byte.MIN_VALUE) % 100); // evita negativo
if (sequencia.length() >= tamanho) break;
}
return sequencia.substring(0, tamanho);
}
}
@DiegoQueiroz
Copy link
Author

Esta forma de geração é superior a baseada em java.util.Random, pois é razoávelmente segura para aplicações que necessitam gerar números aleatórios reais, que não devam ser descobertos. A classe java.util.Random utiliza apenas uma sequência pseudo-aleatória com base no relógio do sistema que, embora difícil, pode ser descoberta.

A classe java.security.SecureRandom gera uma sequencia pseudo-aleatória com base em uma semente aleatória real, obtida da piscina de entropia do sistema. Essa forma de geração é segura para servidores (sem mouse e teclado), pois não depende de entropia sendo gerada constantemente e, portanto, não causará travamentos se houver falta de entropia.

Mais informações na documentação da classe SecureRandom.

@DiegoQueiroz
Copy link
Author

Essas funções geram sequências de DÍGITOS (números apenas) e devem ser utilizadas apenas quando essa limitação existir. Se a combinação de letras, números ou até símbolos puder ser considerada, esses métodos NÃO devem ser utilizados, pois são significativamente menos seguros.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment