Прочитать на английском

Поделиться через


RNGCryptoServiceProvider Класс

Определение

Внимание!

RNGCryptoServiceProvider is obsolete. To generate a random number, use one of the RandomNumberGenerator static methods instead.

Реализует криптографический генератор случайных чисел, используя реализацию, предоставляемую поставщиком служб шифрования (CSP). Этот класс не наследуется.

C#
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
C#
[System.Obsolete("RNGCryptoServiceProvider is obsolete. To generate a random number, use one of the RandomNumberGenerator static methods instead.", DiagnosticId="SYSLIB0023", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
C#
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
Наследование
RNGCryptoServiceProvider
Атрибуты

Примеры

В следующем примере кода показано, как создать случайное число с 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;
    }
}

Комментарии

Важно!

Этот тип реализует интерфейс IDisposable. По окончании использования выдаленную ему память следует прямо или косвенно освободить. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.

Конструкторы

RNGCryptoServiceProvider()
Устаревшие..

Инициализирует новый экземпляр класса RNGCryptoServiceProvider.

RNGCryptoServiceProvider(Byte[])
Устаревшие..

Инициализирует новый экземпляр класса RNGCryptoServiceProvider.

RNGCryptoServiceProvider(CspParameters)
Устаревшие..

Инициализирует новый экземпляр класса RNGCryptoServiceProvider с заданными параметрами.

RNGCryptoServiceProvider(String)
Устаревшие..

Инициализирует новый экземпляр класса RNGCryptoServiceProvider.

Методы

Dispose()
Устаревшие..

При переопределении в производном классе освобождает все ресурсы, используемые текущим объектом RandomNumberGenerator.

(Унаследовано от RandomNumberGenerator)
Dispose(Boolean)
Устаревшие..

При переопределении в производном классе освобождает неуправляемые ресурсы, используемые объектом RandomNumberGenerator, и опционально освобождает управляемые ресурсы.

(Унаследовано от RandomNumberGenerator)
Equals(Object)
Устаревшие..

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Finalize()
Устаревшие..

Освобождает ресурсы, используемые классом RNGCryptoServiceProvider.

GetBytes(Byte[])
Устаревшие..

Заполняет массив байтов криптостойкой последовательностью случайных значений.

GetBytes(Byte[], Int32, Int32)
Устаревшие..

Заполняет указанный массив байтов криптостойкой случайной последовательностью значений, начиная с указанного индекса и заканчивая указанным числом байтов.

GetBytes(Byte[], Int32, Int32)
Устаревшие..

Заполняет указанный массив байтов криптостойкой случайной последовательностью значений.

(Унаследовано от RandomNumberGenerator)
GetBytes(Span<Byte>)
Устаревшие..

Заполняет диапазон криптостойкими случайными байтами.

GetBytes(Span<Byte>)
Устаревшие..

Заполняет диапазон криптостойкими случайными байтами.

(Унаследовано от RandomNumberGenerator)
GetHashCode()
Устаревшие..

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetNonZeroBytes(Byte[])
Устаревшие..

Заполняет массив байтов криптостойкой последовательностью случайных ненулевых значений.

GetNonZeroBytes(Span<Byte>)
Устаревшие..

Заполняет диапазон байтов криптостойкой последовательностью случайных ненулевых значений.

GetNonZeroBytes(Span<Byte>)
Устаревшие..

Заполняет диапазон байтов криптостойкой последовательностью случайных ненулевых значений.

(Унаследовано от RandomNumberGenerator)
GetType()
Устаревшие..

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()
Устаревшие..

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()
Устаревшие..

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

Продукт Версии (Устарело)
.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

Потокобезопасность

Данный тип потокобезопасен.

См. также раздел