Duplicata possible : Comment générer une chaîne aléatoire en Java
Je souhaite générer une chaîne aléatoire de 20 caractères sans utiliser de classes Apache. Je ne me soucie pas vraiment de savoir si c'est alphanumérique ou non. De plus, je vais le convertir en un tableau d'octets plus tard pour info.
Merci,
Réponses
Trop de publicités?Voici. Spécifiez simplement les caractères que vous souhaitez autoriser sur la première ligne.
char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder sb = new StringBuilder(20);
Random random = new Random();
for (int i = 0; i < 20; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
Si vous l'utilisez pour générer quelque chose de sensible comme un mot de passe réinitialiser l'URL ou le cookie d'ID de session ou réinitialiser le mot de passe temporaire, assurez-vous d'utiliser
java.security.SecureRandom
place. Les valeurs produites parjava.util.Random
etjava.util.concurrent.ThreadLocalRandom
sont mathématiquement prévisibles.
J'utiliserais cette approche:
String randomString(final int length) {
Random r = new Random(); // perhaps make it a class variable so you don't make a new one every time
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++) {
char c = (char)(r.nextInt((int)(Character.MAX_VALUE)));
sb.append(c);
}
return sb.toString();
}
Si vous voulez un octet[], vous pouvez faire ceci :
byte[] randomByteString(final int length) {
Random r = new Random();
byte[] result = new byte[length];
for(int i = 0; i < length; i++) {
result[i] = r.nextByte();
}
return result;
}
Ou tu peux faire ça
byte[] randomByteString(final int length) {
Random r = new Random();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++) {
char c = (char)(r.nextInt((int)(Character.MAX_VALUE)));
sb.append(c);
}
return sb.toString().getBytes();
}