Как сгенерировать случайную буквенно-цифровую строку из 16 символов в Java с помощью SecureRandom - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь сгенерировать буквенно-цифровую строку, используя SecureRandom.

Вот мой маленький код:

import java.math.BigInteger;
import java.security.SecureRandom;

public class GenerateSecureRandom {
  private static SecureRandom SECURE_RANDOM = new SecureRandom();

  public static String nextSessionId() {
     return new BigInteger(64, SECURE_RANDOM).toString(16);
  }
}

Это работает! Я получаю, например, это: 7c52cfce6c479803 = 16 символов: ОК!

Моя проблема в том, что иногда этот код возвращает строку из 15 символов, и я не понимаю, почему. (Я новичок ...)

Вот пример: 515c38584d0a077 = 15 символов: ОШИБКА

Что я делаю не так?

Я новичок в программировании на Java, поэтому, пожалуйста, будьте снисходительны, если мой подход не верен:)

Если этот код неверен, как я могу получить ожидаемый результат? Я хотел бы использовать SecureRandom.

Заранее благодарю за ответы

Извините, если мой вопрос дублируется, я искал, не найдя ответа ...

1 Ответ

0 голосов
/ 26 апреля 2018

Используемый вами конструктор BigInteger принимает максимальную битовую длину.

Создает случайно сгенерированный BigInteger, равномерно распределенный в диапазоне от 0 до (2 numBits - 1 ) включительно.

Параметры: numBits - максимальная длина в битах нового BigInteger.

Вы можете реже получать строки длиной менее 15 символов.

Это происходит из-за того, что старший значащий бит (ы) может быть нулем, что приводит к шестнадцатеричному числу, для которого не требуется целых 16 символов для представления. Обратите внимание, что ни одна из генерируемых вами строк не начинается с 0.

Если количество символов меньше 16, то добавьте '0' символов.

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