【发布时间】:2021-02-17 13:24:09
【问题描述】:
我正在尝试在 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;
}
【问题讨论】:
-
20位是指十进制、十六进制还是二进制?
-
@ArtjomB。对不起,我的意思是十进制数字。我想我已经找到了解决问题的方法——尽管它可能不是最有效的解决方案,但我会将其添加到我的帖子中。
-
@lb-99 最好发布self-answer,而不是在帖子中编辑您的答案。这使事情变得清晰和分开,并让人们与所有其他人一起对答案进行投票——这可能不是最好的解决方案。谢谢。
-
@ggorlen 出于某种原因我无法回答这个问题 - 可能是因为它已被标记为重复?
标签: java random biginteger