如何在 Java 中创建特定位大小的随机输出?
How to create a random output of a certain bit size in Java?
我想创建一个随机的字母数字字符串,其 bit 计数 always 的大小为 k。大小 k 将 相对 大(从 128 到 2048 或更大)。我正在阅读 this excellent thread 并尝试使用 Random
和 SecureRandom
class 来解决问题,但无济于事。
更准确地说,结果不一定是字符串,它可以是任何东西,只要它是 random 及其 bit 计数始终为 k。
你检查过http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html了吗?
如果你需要 128 位的随机数据,你将需要 Java 中的 16 个字节(因为一个字节是 8 位)所以之后(无耻地从所说的 API 复制):
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16];
random.nextBytes(bytes);
现在你有一个包含 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();
}
另一种可能性是 BigInteger
构造函数:BigInteger(int numBits, Random rnd)
.
根据您需要的随机位的安全性,使用 Random
或 SecureRandom
作为第二个参数。有多种方法可以将 BigInteger
转换为您想要的任何最终格式。要获取字符串,请使用 BigInteger.toString(2)
,其中 2 是二进制的基数。
我想创建一个随机的字母数字字符串,其 bit 计数 always 的大小为 k。大小 k 将 相对 大(从 128 到 2048 或更大)。我正在阅读 this excellent thread 并尝试使用 Random
和 SecureRandom
class 来解决问题,但无济于事。
更准确地说,结果不一定是字符串,它可以是任何东西,只要它是 random 及其 bit 计数始终为 k。
你检查过http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html了吗?
如果你需要 128 位的随机数据,你将需要 Java 中的 16 个字节(因为一个字节是 8 位)所以之后(无耻地从所说的 API 复制):
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16];
random.nextBytes(bytes);
现在你有一个包含 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();
}
另一种可能性是 BigInteger
构造函数:BigInteger(int numBits, Random rnd)
.
根据您需要的随机位的安全性,使用 Random
或 SecureRandom
作为第二个参数。有多种方法可以将 BigInteger
转换为您想要的任何最终格式。要获取字符串,请使用 BigInteger.toString(2)
,其中 2 是二进制的基数。