Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何生成具有特定位范围的SecureRandom数_Java_Random_Bit_Secure Random - Fatal编程技术网

Java 如何生成具有特定位范围的SecureRandom数

Java 如何生成具有特定位范围的SecureRandom数,java,random,bit,secure-random,Java,Random,Bit,Secure Random,我有最大数量的未对齐位,例如35位,需要从1-68719476734生成唯一随机数(最大数量为35位)。 可以使用SecureRandom,但必须从中提取5个字节,并可能转换为Long,但冲突的可能性似乎令人担忧。为该范围生成随机值的选项有哪些。 如果在这个范围内发生碰撞并重新生成,我是否可以使用nanoTime为这个随机数设定种子。可能有更好的方法,但这可能会有所帮助。第一个简单地打印从流生成的单个数字。第二个屏蔽掉所需的位。有趣的是,同一种子的值不同(我无法解释)。但是,第一种允许范围的方法

我有最大数量的未对齐位,例如35位,需要从1-68719476734生成唯一随机数(最大数量为35位)。 可以使用SecureRandom,但必须从中提取5个字节,并可能转换为Long,但冲突的可能性似乎令人担忧。为该范围生成随机值的选项有哪些。
如果在这个范围内发生碰撞并重新生成,我是否可以使用nanoTime为这个随机数设定种子。

可能有更好的方法,但这可能会有所帮助。第一个简单地打印从流生成的单个数字。第二个屏蔽掉所需的位。有趣的是,同一种子的值不同(我无法解释)。但是,第一种允许范围的方法可能足以满足您的需求。我显然不是这方面的专家,但提供它是为了培养一些想法

SecureRandom r = new SecureRandom();
 r.setSeed(23);
// generate a sum of 1 element to get the element from the stream.
long v = 0;
while (v == 0) {
   v = r.longs(1,1L<<34, (1L<<35)-1).sum();
}
System.out.println(v);
System.out.println(64-Long.numberOfLeadingZeros(v));

r.setSeed(23);
long vv = 0;
while (vv == 0) {
   vv = r.nextLong()&((1L<<35)-1);
}

System.out.println(vv);
System.out.println(64-Long.numberOfLeadingZeros(vv));
我在这里的假设是,如果随机数不符合安全要求,则不会提供上述流版本。

首先,有几点意见:

  • 35位的最大值是34359738367,而不是68719476734。
    68719476734不是36位的最大值,68719476735是

  • 不要播种种子。这降低了it的安全性

要生成一个35位的随机数,不包括值零,只需生成一个
long
随机值,取最后35位,如果值为零,则重做

SecureRandom r=newsecurerandom();
长期价值;
做{

value=r.nextLong()&((1L此答案完全忽略了问题中下限为1而不是0的部分。您所说的“碰撞的可能性似乎是一个问题”是什么意思?对于真正的随机值,总是有碰撞的机会,对此你不应该做任何事情。如果你消除了碰撞的机会,结果将不会是真正的随机。寻找一个足够随机的种子,以避免来自任何随机数的碰撞。你为什么相信纳米时间比任何算法都会产生更好的随机性m内置在
SecureRandom
类中?如果它可以用于SecureRandom,我将在其中查找种子。在这种情况下,如何确保有SecureRandom的范围而没有种子
31237208166
35
9741674490
34