在Java中生成n个随机位
在研究加密时,我一直在玩弄java的安全模块。 我有一个关于生成随机数量的n位的问题 说我想生成。。1000位。 我使用以下代码:在Java中生成n个随机位,java,security,bit,Java,Security,Bit,在研究加密时,我一直在玩弄java的安全模块。 我有一个关于生成随机数量的n位的问题 说我想生成。。1000位。 我使用以下代码: BigInteger num = new BigInteger(1000, new SecureRandom()) 当我打印它时,我会得到一个很大的十进制值,但是当我去计算位时,我的问题就来了。我将“num”中的十进制值插入到十进制到二进制转换器中。当我计算字符的数量(1和0位)时,数量并不总是1000。有时是997996等等。我的问题是,为什么会发生这种情况,我
BigInteger num = new BigInteger(1000, new SecureRandom())
当我打印它时,我会得到一个很大的十进制值,但是当我去计算位时,我的问题就来了。我将“num”中的十进制值插入到十进制到二进制转换器中。当我计算字符的数量(1和0位)时,数量并不总是1000。有时是997996等等。我的问题是,为什么会发生这种情况,我如何解决这个问题?十进制值仍然是1000位吗
任何帮助都将不胜感激 如果希望1000位字符串的高位设置为1,可以执行以下操作:
String b = null;
try {
b = "1" + SecureRandom.getInstanceStrong().ints(999, 0, 2)
.mapToObj(Integer::toString)
.collect(Collectors.joining());
} catch (NoSuchAlgorithmException ne) {
ne.printStackTrace();
}
System.out.println(b.length());
System.out.println(b.substring(0,10)
打印出类似于
1000
1110110001
我怀疑第一位可能是0。
10
是一个随机的4位基数2数字。哦,你不同意吗?0010
更好吗?是同一个号码对于十进制数,99
是一个2位数字,还是一个没有前导零的3位数字?好的,我明白了,前导0出现的问题也是如此?顺便说一下,1000是一个例子,它发生在一些其他值上,例如1021