RNGCryptoServiceProvider.GetBytes メソッド

定義

オーバーロード

GetBytes(Byte[])

バイト配列に、暗号化に使用するランダムな値の厳密なシーケンスを設定します。

GetBytes(Span<Byte>)

暗号強度の高いランダム バイトをスパンに格納します。

GetBytes(Byte[], Int32, Int32)

指定されたバイト配列に、指定されたインデックスから始めて、指定されたバイト数だけ、暗号強度の高いランダムな値のシーケンスを格納します。

GetBytes(Byte[])

ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs

バイト配列に、暗号化に使用するランダムな値の厳密なシーケンスを設定します。

C#
public override void GetBytes (byte[] data);

パラメーター

data
Byte[]

暗号化に使用するランダムな値の厳密なシーケンスを格納する配列。

例外

暗号化サービス プロバイダー (CSP) を取得できません。

datanullです。

次のコード例は、 クラスを使用して乱数を作成する方法を RNGCryptoServiceProvider 示しています。

C#
//The following sample uses the Cryptography class to simulate the roll of a dice.

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

class RNGCSP
{
    private static RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
    // Main method.
    public static void Main()
    {
        const int totalRolls = 25000;
        int[] results = new int[6];

        // Roll the dice 25000 times and display
        // the results to the console.
        for (int x = 0; x < totalRolls; x++)
        {
            byte roll = RollDice((byte)results.Length);
            results[roll - 1]++;
        }
        for (int i = 0; i < results.Length; ++i)
        {
            Console.WriteLine("{0}: {1} ({2:p1})", i + 1, results[i], (double)results[i] / (double)totalRolls);
        }
        rngCsp.Dispose();
    }

    // This method simulates a roll of the dice. The input parameter is the
    // number of sides of the dice.

    public static byte RollDice(byte numberSides)
    {
        if (numberSides <= 0)
            throw new ArgumentOutOfRangeException("numberSides");

        // Create a byte array to hold the random value.
        byte[] randomNumber = new byte[1];
        do
        {
            // Fill the array with a random value.
            rngCsp.GetBytes(randomNumber);
        }
        while (!IsFairRoll(randomNumber[0], numberSides));
        // Return the random number mod the number
        // of sides.  The possible values are zero-
        // based, so we add one.
        return (byte)((randomNumber[0] % numberSides) + 1);
    }

    private static bool IsFairRoll(byte roll, byte numSides)
    {
        // There are MaxValue / numSides full sets of numbers that can come up
        // in a single byte.  For instance, if we have a 6 sided die, there are
        // 42 full sets of 1-6 that come up.  The 43rd set is incomplete.
        int fullSetsOfValues = Byte.MaxValue / numSides;

        // If the roll is within this range of fair values, then we let it continue.
        // In the 6 sided die case, a roll between 0 and 251 is allowed.  (We use
        // < rather than <= since the = portion allows through an extra 0 value).
        // 252 through 255 would provide an extra 0, 1, 2, 3 so they are not fair
        // to use.
        return roll < numSides * fullSetsOfValues;
    }
}

注釈

バイト配列の長さは、生成される暗号強度の高いランダム バイトの数を決定します。

このメソッドはスレッド セーフです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetBytes(Span<Byte>)

ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs

暗号強度の高いランダム バイトをスパンに格納します。

C#
public override void GetBytes (Span<byte> data);

パラメーター

data
Span<Byte>

暗号強度の高いランダム バイトを格納するスパン。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetBytes(Byte[], Int32, Int32)

ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs
ソース:
RNGCryptoServiceProvider.cs

指定されたバイト配列に、指定されたインデックスから始めて、指定されたバイト数だけ、暗号強度の高いランダムな値のシーケンスを格納します。

C#
public override void GetBytes (byte[] data, int offset, int count);

パラメーター

data
Byte[]

暗号化に使用する厳密なランダム バイトを格納する配列。

offset
Int32

格納操作の開始位置となる配列のインデックス。

count
Int32

格納するバイト数。

例外

datanullです。

offset または count が 0 未満です。

offsetcount の合計が data の長さを超えています。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1