Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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
C# 使用RNGCryptoServiceProvider来;模拟;掷骰子_C#_Cryptography - Fatal编程技术网

C# 使用RNGCryptoServiceProvider来;模拟;掷骰子

C# 使用RNGCryptoServiceProvider来;模拟;掷骰子,c#,cryptography,C#,Cryptography,我一直在试着用C#来模拟掷6面骰子。我认为使用RNGCSP比随机的要好,因为它更安全 我尝试使用来实现这一点,但有几件事我在代码中没有理解: 如何使用RNGCSP生成5位数长的数字 如何生成从1到6的数字(不包括零) 1。如何使用RNGCSP生成5位数长的数字? 对于数字,可以使用范围。不过,你必须自己考虑下限。数字的范围在中处理 因此,对于一个5位数字,min将是0或10000,max将是100000,因为max是独占的 2。如何生成从1到6的数字(不包括零)? 基本上相同的方法,生成一个范围

我一直在试着用C#来模拟掷6面骰子。我认为使用RNGCSP比随机的要好,因为它更安全

我尝试使用来实现这一点,但有几件事我在代码中没有理解:

  • 如何使用RNGCSP生成5位数长的数字

  • 如何生成从1到6的数字(不包括零)

  • 1。如何使用RNGCSP生成5位数长的数字?

    对于数字,可以使用范围。不过,你必须自己考虑下限。数字的范围在中处理

    因此,对于一个5位数字,
    min
    将是
    0
    10000
    max
    将是
    100000
    ,因为
    max
    是独占的


    2。如何生成从1到6的数字(不包括零)?

    基本上相同的方法,生成一个范围[1,7],其中7(最大值)是独占的

    如果你只是想得到一个骰子结果,你可以这样做(未经测试!):

    RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider();
    byte[]singleByteBuf=新字节[1];
    int max=Byte.MaxValue-Byte.MaxValue%6;
    while(true){
    rng.GetBytes(singleByteBuf);
    int b=单字节缓冲[0];
    如果(b

    基本上是相同的想法,但is一次只从
    RNGCryptoServiceProvider
    请求1个字节,因此不会浪费额外的3个字节。

    1.如何使用RNGCSP生成5位长的数字?

    对于数字,你可以使用一个范围。但是你必须自己考虑下限。数字的范围在中处理

    因此,对于一个5位数字,
    min
    将是
    0
    10000
    max
    将是
    100000
    ,因为
    max
    是独占的


    2.如何生成从1到6的数字(不包括零)?

    基本上相同的方法,生成一个范围[1,7],其中7(最大值)是独占的

    如果你只是想得到一个骰子结果,你可以这样做(未经测试!):

    RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider();
    byte[]singleByteBuf=新字节[1];
    int max=Byte.MaxValue-Byte.MaxValue%6;
    while(true){
    rng.GetBytes(singleByteBuf);
    int b=单字节缓冲[0];
    如果(b

    基本上是相同的想法,但is一次只从
    RNGCryptoServiceProvider
    请求1个字节,因此不会浪费额外的3个字节。

    1.如何使用RNGCSP生成5位长的数字?

    对于数字,你可以使用一个范围。但是你必须自己考虑下限。数字的范围在中处理

    因此,对于一个5位数字,
    min
    将是
    0
    10000
    max
    将是
    100000
    ,因为
    max
    是独占的


    2.如何生成从1到6的数字(不包括零)?

    基本上相同的方法,生成一个范围[1,7],其中7(最大值)是独占的

    如果你只是想得到一个骰子结果,你可以这样做(未经测试!):

    RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider();
    byte[]singleByteBuf=新字节[1];
    int max=Byte.MaxValue-Byte.MaxValue%6;
    while(true){
    rng.GetBytes(singleByteBuf);
    int b=单字节缓冲[0];
    如果(b

    基本上是相同的想法,但is一次只从
    RNGCryptoServiceProvider
    请求1个字节,因此不会浪费额外的3个字节。

    1.如何使用RNGCSP生成5位长的数字?

    对于数字,你可以使用一个范围。但是你必须自己考虑下限。数字的范围在中处理

    因此,对于一个5位数字,
    min
    将是
    0
    10000
    max
    将是
    100000
    ,因为
    max
    是独占的


    2.如何生成从1到6的数字(不包括零)?

    基本上相同的方法,生成一个范围[1,7],其中7(最大值)是独占的

    如果你只是想得到一个骰子结果,你可以这样做(未经测试!):

    RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider();
    byte[]singleByteBuf=新字节[1];
    int max=Byte.MaxValue-Byte.MaxValue%6;
    while(true){
    rng.GetBytes(singleByteBuf);
    int b=单字节缓冲[0];
    如果(b


    基本上是相同的想法,但is一次只从
    RNGCryptoServiceProvider
    请求1个字节,因此它不会再浪费3个字节。

    模拟掷骰子需要多少安全性?我需要它完全随机。“如何生成1到6的数字(不包括零)?”该示例仅使用:
    return(byte)((随机数[0]%numberSides)+1)但是,如果随机性很重要的话,还有一些额外的事情要考虑。如果RNGCSP返回一个字节,它的值可以从0到255。因此,你可以把它变成6和1。但是这样做,256个可能的值。使用Idle_Mind公式得到的1、2、3或4的值将在256次中分别出现43次。5和6在256次中仅出现42次。因此,在使用mod之前,您应该抛出任何字节值252-255,然后重新滚动。@Preston Guillot:如果您正在运行在线赌场或类似游戏,那么您的随机数n需要100%安全。如果你的骰子卷显示出任何偏差,那么某人,某些人
    
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] singleByteBuf = new byte[1];
    int max = Byte.MaxValue - Byte.MaxValue % 6;
    while (true) {
        rng.GetBytes(singleByteBuf);
        int b = singleByteBuf[0];
        if (b < max) {
            return b % 6 + 1;
        }
     }