RNGCryptoServiceProvider 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
警告
RNGCryptoServiceProvider is obsolete. To generate a random number, use one of the RandomNumberGenerator static methods instead.
使用由密碼編譯服務供應者 (CSP) 提供的實作 (implementation),實作密碼編譯亂數產生器 (RNG)。 此類別無法獲得繼承。
public ref class RNGCryptoServiceProvider sealed : System::Security::Cryptography::RandomNumberGenerator
public ref class RNGCryptoServiceProvider : System::Security::Cryptography::RandomNumberGenerator
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
[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
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
public class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
[<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}")>]
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
[<System.Runtime.InteropServices.ComVisible(true)>]
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
Public NotInheritable Class RNGCryptoServiceProvider
Inherits RandomNumberGenerator
Public Class RNGCryptoServiceProvider
Inherits RandomNumberGenerator
- 繼承
- 屬性
範例
下列程式碼範例示範如何使用 類別建立亂數 RNGCryptoServiceProvider 。
//The following sample uses the Cryptography class to simulate the roll of a dice.
using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Security::Cryptography;
ref class RNGCSP
{
public:
// Main method.
static void Main()
{
const int totalRolls = 25000;
array<int>^ results = gcnew array<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);
}
}
// This method simulates a roll of the dice. The input parameter is the
// number of sides of the dice.
static Byte RollDice(Byte numberSides)
{
if (numberSides <= 0)
throw gcnew ArgumentOutOfRangeException("numberSides");
// Create a new instance of the RNGCryptoServiceProvider.
RNGCryptoServiceProvider^ rngCsp = gcnew RNGCryptoServiceProvider();
// Create a byte array to hold the random value.
array<Byte>^ randomNumber = gcnew array<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;
}
};
int main()
{
RNGCSP::Main();
}
//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;
}
}
'The following sample uses the Cryptography class to simulate the roll of a dice.
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
Class RNGCSP
Private Shared rngCsp As New RNGCryptoServiceProvider()
' Main method.
Public Shared Sub Main()
Const totalRolls As Integer = 25000
Dim results(5) As Integer
' Roll the dice 25000 times and display
' the results to the console.
Dim x As Integer
For x = 0 To totalRolls
Dim roll As Byte = RollDice(System.Convert.ToByte(results.Length))
results((roll - 1)) += 1
Next x
Dim i As Integer
While i < results.Length
Console.WriteLine("{0}: {1} ({2:p1})", i + 1, results(i), System.Convert.ToDouble(results(i)) / System.Convert.ToDouble(totalRolls))
i += 1
End While
rngCsp.Dispose()
End Sub
' This method simulates a roll of the dice. The input parameter is the
' number of sides of the dice.
Public Shared Function RollDice(ByVal numberSides As Byte) As Byte
If numberSides <= 0 Then
Throw New ArgumentOutOfRangeException("NumSides")
End If
' Create a byte array to hold the random value.
Dim randomNumber(0) As Byte
Do
' Fill the array with a random value.
rngCsp.GetBytes(randomNumber)
Loop While Not IsFairRoll(randomNumber(0), numberSides)
' Return the random number mod the number
' of sides. The possible values are zero-
' based, so we add one.
Return System.Convert.ToByte(randomNumber(0) Mod numberSides + 1)
End Function
Private Shared Function IsFairRoll(ByVal roll As Byte, ByVal numSides As Byte) As Boolean
' 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.
Dim fullSetsOfValues As Integer = [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
End Function 'IsFairRoll
End Class
備註
重要
此型別代表 IDisposable 介面。 當您完成使用型別時,您應該直接或間接處置它。 若要直接處置型別,請呼叫其 try
/catch
區塊中的 Dispose 方法。 若要間接處置它,請使用語言建構函式,例如 using
(在 C# 中) 或 Using
(在 Visual Basic 中)。 如需詳細資訊,請參閱 IDisposable 介面文章中的<使用實作 IDisposable 的物件>一節。
建構函式
RNGCryptoServiceProvider() |
已過時。
初始化 RNGCryptoServiceProvider 類別的新執行個體。 |
RNGCryptoServiceProvider(Byte[]) |
已過時。
初始化 RNGCryptoServiceProvider 類別的新執行個體。 |
RNGCryptoServiceProvider(CspParameters) |
已過時。
使用指定的參數,初始化 RNGCryptoServiceProvider 類別的新執行個體。 |
RNGCryptoServiceProvider(String) |
已過時。
初始化 RNGCryptoServiceProvider 類別的新執行個體。 |
方法
Dispose() |
已過時。
在衍生類別中覆寫時,將目前 RandomNumberGenerator 類別的執行個體所使用的所有資源全部釋出。 (繼承來源 RandomNumberGenerator) |
Dispose(Boolean) |
已過時。
當在衍生類別中覆寫時,釋放 RandomNumberGenerator 所使用的 Unmanaged 資源,並選擇性釋放 Managed 資源。 (繼承來源 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) |
適用於
執行緒安全性
此型別具備執行緒安全。