在Java中生成一个随机的、固定长度的BigInteger



我正在尝试在Java中生成随机的20位BigInteger

到目前为止,我已经能够生成一个固定长度的十六进制值。

// 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;
}

我理解你的问题是生成固定长度(固定位数)的随机数

显然,使用十六进制值将工作,因为任何十六进制数字表示4个字节。所以当你固定字节长度时(代码中的字节表)它工作得很好

在处理十进制数时,我的建议是:

1-有方法生成有上下边界的随机数,例如5和10之间的随机数,所以如果你想要一个20位数的随机数,你必须生成(10^19)和(10^20-1)之间的随机数

2-第二种是硬编码方法,当你生成随机数字(0到9之间,除了强权重的数字必须在1到9之间)时,你会进行20次循环迭代,你得到了这个数字。

最新更新