如何在Java中创建特定位大小的随机输出?

如何在Java中创建特定位大小的随机输出?,java,random,bit,secure-random,Java,Random,Bit,Secure Random,我想创建一个随机字母数字字符串,其位计数将始终大小为k。尺寸k将相对较大(从128到2048不等)。我正在阅读,我正在尝试使用Random和SecureRandom类找出一些问题,但是没有用 更准确地说,结果不一定是字符串,它可以是任何东西,只要它是随机的,并且它的位计数总是k 你检查过了吗 如果您需要128位的随机数据,那么在Java中需要16个字节(因为一个字节是8位的),所以之后(无耻地从上述API复制): 现在有了一个包含128位随机数据的数组。2048年是一个字节[256] 你检查过了

我想创建一个随机字母数字字符串,其计数将始终大小为k。尺寸k将相对较大(从128到2048不等)。我正在阅读,我正在尝试使用
Random
SecureRandom
类找出一些问题,但是没有用

更准确地说,结果不一定是字符串,它可以是任何东西,只要它是随机的,并且它的计数总是k

你检查过了吗

如果您需要128位的随机数据,那么在Java中需要16个字节(因为一个字节是8位的),所以之后(无耻地从上述API复制):

现在有了一个包含128位随机数据的数组。2048年是一个字节[256]

你检查过了吗

如果您需要128位的随机数据,那么在Java中需要16个字节(因为一个字节是8位的),所以之后(无耻地从上述API复制):


现在有了一个包含128位随机数据的数组。2048年是一个字节[256]

如果您确实需要特定数量的位,并且不能满足于8字节的倍数,请尝试将布尔值与
SecureRandom

SecureRandom sr = new SecureRandom();
boolean bools[] = new boolean[k];
for(int x = 0; x < bools.length; x++){
 bools[x] = sr.nextBoolean();
}
SecureRandom sr=new SecureRandom();
布尔布尔值[]=新布尔值[k];
对于(int x=0;x
如果您确实需要特定数量的位,并且不能满足于8字节的倍数,请尝试将布尔值与
SecureRandom

SecureRandom sr = new SecureRandom();
boolean bools[] = new boolean[k];
for(int x = 0; x < bools.length; x++){
 bools[x] = sr.nextBoolean();
}
SecureRandom sr=new SecureRandom();
布尔布尔值[]=新布尔值[k];
对于(int x=0;x
另一种可能性是
biginger
构造函数:
biginger(int numBits,Random rnd)


根据您需要随机位的安全程度,对第二个参数使用
random
SecureRandom
。有多种方法可以将
biginger
转换为所需的最终格式。要获取字符串,请使用
biginger.toString(2)
,其中2是二进制的基数。

另一种可能是
biginger
构造函数:
biginger(int numBits,Random rnd)


根据您需要随机位的安全程度,对第二个参数使用
random
SecureRandom
。有多种方法可以将
biginger
转换为所需的最终格式。要获取字符串,请使用
biginger.toString(2)
,其中2是二进制的基数。

使用如何计算字母数字字符串的位?很容易生成大小合适的字节数组:只需使用
SecureRandom.nextBytes(byte[])
。四舍五入到最接近的8位,如果需要,忽略其他位…如果你已经阅读了回答问题的线索,你应该准确地解释为什么你仍然认为需要打开一个新问题。考虑到上述线程已经提供了包含完整工作代码的答案,“我正试图用……找出一些东西,但没有用”这句话是不可理解的。使用如何计算字母数字字符串的位?很容易生成大小合适的字节数组:只需使用
SecureRandom.nextBytes(byte[])
。四舍五入到最接近的8位,如果需要,忽略其他位…如果你已经阅读了回答问题的线索,你应该准确地解释为什么你仍然认为需要打开一个新问题。“我正试图用…找出一些东西,但没有用”这句话是不可理解的,因为所说的线程已经提供了包含完整的工作代码的答案。这可能是一个愚蠢的问题,但使用这种方法总是产生完全相同的结果,更具体地说,
[B@a881b5
。这是应该发生的吗?我希望每次运行时都有不同的随机输出[B@a881b5不是数据,而是执行System.out.print(随机)操作时数组的ID-请参阅以了解。要获取字符串表示形式,请使用java.util.Arrays.toString()这可能是一个愚蠢的问题,但使用此方法总是产生完全相同的结果,更具体地说是
[B@a881b5
。这是应该发生的吗?我希望每次运行时都有不同的随机输出[B@a881b5不是数据,而是执行System.out.print(随机)时数组的ID-请参阅以了解。要获取字符串表示,请使用java.util.Arrays.toString()