【发布时间】:2012-04-18 13:24:44
【问题描述】:
使用 Xorshift 随机数生成器...我已经有了生成器,但我无法修改它以提供介于 0 和上限之间的数字(如 Java Random 类中的 nextInt() 方法)。
long seed = System.nanoTime();
int next(int nbits) {
long x = seed;
x ^= (x << 21);
x ^= (x >>> 35);
x ^= (x << 4);
seed = x;
x &= ((1L << nbits) -1);
return (int) x;
}
有什么想法吗?
【问题讨论】:
-
你能用
((int)x) % (upper_limit + 1)吗? (这是一个真诚的问题;我对 Xorshift 的属性知之甚少——具体来说,它在低位有多少熵——不知道这是否是个好主意。) -
使用余数函数 - n % x
-
我想过这个,但我感觉它会影响加密强度。难道没有理由对它有任何影响吗?
标签: java random cryptography