Как эффективно генерировать безопасную случайную буквенно-цифровую строку в Java? - PullRequest
16 голосов
/ 18 августа 2011

Как эффективно генерировать безопасную случайную (или псевдослучайную) буквенно-цифровую строку в Java?

Ответы [ 7 ]

22 голосов
/ 18 августа 2011

Инициализируйте массив, содержащий все принятые символы (CHARS_ARRAY), затем создайте экземпляр SecureRandom и несколько раз вызовите nextInt(CHARS_ARRAY.length), чтобы получить случайный индекс в вашем массиве символов. Добавляйте каждый символ к StringBuilder, пока не получите ожидаемое количество символов.

3 голосов
/ 18 августа 2011

Использование UUIDs :

UUID random = UUID.randomUUID();
System.out.println( random );
0 голосов
/ 28 апреля 2019
import java.security.SecureRandom;
import java.util.Random;

public class PasswordHelper {        

    public static String generatePassword (int length) {

    //minimum length of 6
    if (length < 4) {
        length = 6;
    }

    final char[] allAllowed = "abcdefghijklmnopqrstuvwxyzABCDEFGJKLMNPRSTUVWXYZ0123456789".toCharArray();

    //Use cryptographically secure random number generator
    Random random = new SecureRandom();

    StringBuilder password = new StringBuilder(); 

    for (int i = 0; i < length; i++) {
        password.append(allAllowed[random.nextInt(allAllowed.length)]);
    }

    return password.toString();

    }

}
0 голосов
/ 04 апреля 2019
    String chrs = "0123456789abcdefghijklmnopqrstuvwxyz-_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    SecureRandom secureRandom = SecureRandom.getInstanceStrong();
    // 9 is the length of the string you want
    String customTag = secureRandom.ints(9, 0, chrs.length()).mapToObj(i -> chrs.charAt(i))
      .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
    System.out.println(customTag);

Примеры:

// q3HX6EctP
// WjRrMjQT4
// sX-Piq4DB
0 голосов
/ 18 августа 2011

http://download.oracle.com/javase/6/docs/api/java/security/SecureRandom.html

Из Javadoc:

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
0 голосов
/ 18 августа 2011

Создание открытого ключа для алгоритма шифрования с открытым ключом и преобразование последовательности байтов в строку с помощью алгоритма Base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...