Я пытаюсь сгенерировать случайный 20-значный BigInteger
на Java.
До сих пор мне удавалось сгенерировать шестнадцатеричное значение фиксированной длины.
// generate a user-specified number of random bytes
public void getRandomNumber(int count) {
byte[] bytes = new byte[count];
new SecureRandom().nextBytes(bytes);
String random = new String(Hex.encode(bytes));
System.out.println(random);
}
Это идеально подходит для генерации шестигранника фиксированной длины. Но я изо всех сил пытаюсь найти эффективный способ сделать это для десятичного представления; при преобразовании из шестнадцатеричного в BigInteger(hexValue, 16)
длина будет изменяться.
Я подумал о том, чтобы попробовать это, установив верхнюю и нижнюю границы или создав что-то достаточно большое и обрезав до желаемой длины, но эти методы не кажутся очень чистыми.
Изменить: решение, которое я придумал, отлично работает в моей программе:
// generate a random number with specified bit length
public void getTokenID() {
int count = 64;
SecureRandom rnd = new SecureRandom();
BigInteger randomCountLength;
String token;
do {
randomCountLength = new BigInteger(count, rnd);
token = randomCountLength.toString();
} while (token.length() != 20);
Tid = token;
}