如何解决在 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- 有一些方法可以生成具有下限和上限的随机数,例如 Random betwen 5 和 10,所以如果你想要一个 20 位的随机数,你必须在 (10^19 ) 和 (10^20-1)
2- 第二种是硬编码方法,当您生成随机数字(0 到 9 之间,强权重的数字必须在 1 到 9 之间)时,进行 20 次迭代的循环并获得数字。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。