java.secure.random对于赌博业来说是一个足够的选择吗?

java.secure.random对于赌博业来说是一个足够的选择吗?,java,algorithm,random,prng,Java,Algorithm,Random,Prng,Java在包Java.secure.random中提供了一个加密安全的随机数生成器 如果我考虑RNG的播种和循环再实例化,是否有可能使用这个数发生器?或者我可以使用数字生成器“原样”吗 有人使用过这个发电机吗 编辑:要求如下: a) 在统计上独立 b) 在其范围内公平分布(在统计预期范围内) c) 通过各种公认的统计测试 d) 加密能力强。您可以使用java.security.SecureRandom,就像您可以使用java.util.Random处理此类事情一样 请注意,java.securi

Java在包Java.secure.random中提供了一个加密安全的随机数生成器

如果我考虑RNG的播种和循环再实例化,是否有可能使用这个数发生器?或者我可以使用数字生成器“原样”吗

有人使用过这个发电机吗

编辑:要求如下:

a) 在统计上独立

b) 在其范围内公平分布(在统计预期范围内)

c) 通过各种公认的统计测试


d) 加密能力强。

您可以使用
java.security.SecureRandom
,就像您可以使用
java.util.Random
处理此类事情一样

请注意,
java.security.SecureRandom
可能依赖于运行程序的计算机的一些熵。如果从中获得许多随机值,则它可能会阻塞,直到计算机生成足够的熵为止(例如,在linux上
java.security.SecureRandom
使用
/dev/uradom


因此,如果您想生成许多随机值并可以使用PRNG,请使用
java.util.random

表示它可能会阻止等待系统生成更多熵(例如,在Linux中,它从/dev/random获取随机数),因此如果您要使用它,也许您需要硬件的帮助:安装随机数生成器卡(一种生成真实随机数而不是伪随机数的硬件设备),这样您的系统将以足够的速度生成随机数,这样您的程序就不会被阻塞。

正如其他人所说,安全RNG的吞吐量可能有限。为了缓解这种情况 您可以通过植入CPRN来拉伸安全的随机性,也可以 尝试优化您对比特流的使用

例如,要洗牌一副牌,您只需要226位,但需要一个简单的数字 算法(为每张卡调用
nextInt(n)
)可能使用1600或3200 比特,浪费了你85%的熵,使你更易受影响七倍 拖延

对于这种情况,我认为这是适当的

接下来,我们将针对更多问题进行一些性能分析 昂贵的熵源(还包含代码):

我倾向于高效使用而不是伸展,因为我认为 证明一个有效率的消费者的公平性要容易得多 值得信赖的熵流,比证明任何绘制方法的公平性都要好 与一个良好的种子PRNG


EDIT2: 我不太懂Java,但我把它放在一起:

public class MySecureRandom extends java.security.SecureRandom {
    private long m = 1;
    private long r = 0;

    @Override
    public final int nextInt(int n) {
        while (true) {
            if (m < 0x80000000L) {
                m <<= 32;
                r <<= 32;
                r += (long)next(32) - Integer.MIN_VALUE;
            }
            long q = m / n;
            if (r < n * q) {
                int x = (int)(r % n);
                m = q;
                r /= n;
                return x;
            }
            m -= n * q;
            r -= n * q;
        }
    }
}
公共类MySecureRandom扩展了java.security.SecureRandom{
私有长m=1;
私有长r=0;
@凌驾
公共最终int nextInt(int n){
while(true){
如果(m<0x8000000L){

m+1您可以选择不同的SecureRandom策略,有些使用种子,有些不使用。谢谢您的回答。我刚刚用需求更新了问题。不幸的是PRNG是不够的。进一步探讨这个问题,我只是注意到最后的SecureRandom生成器是SHA1。他们可能正在做一些事情g除了明显的;否则SHA1的内部状态为160位,这不足以洗牌一副牌。这意味着无论您对RNG或洗牌算法做了什么,它都将仅限于产生可能排列的子集。严格来说,这并不是您的要求之一所以也许没关系。第一个链接已经死了,存档在这里: