RNGCryptoServiceProvider 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
주의
RNGCryptoServiceProvider is obsolete. To generate a random number, use one of the RandomNumberGenerator static methods instead.
CSP(암호화 서비스 공급자)에서 제공하는 구현을 사용하여 RNG(암호화 난수 생성기)를 구현합니다. 이 클래스는 상속할 수 없습니다.
public ref class RNGCryptoServiceProvider sealed : 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
public sealed class RNGCryptoServiceProvider : System.Security.Cryptography.RandomNumberGenerator
[System.Runtime.InteropServices.ComVisible(true)]
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}")>]
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
[<System.Runtime.InteropServices.ComVisible(true)>]
type RNGCryptoServiceProvider = class
inherit RandomNumberGenerator
Public NotInheritable Class RNGCryptoServiceProvider
Inherits RandomNumberGenerator
- 상속
- 특성
예제
다음 코드 예제에서는 클래스를 사용하여 난수를 RNGCryptoServiceProvider 만드는 방법을 보여줍니다.
//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
설명
Important
이 형식은 IDisposable 인터페이스를 구현합니다. 형식 사용을 마쳤으면 직접(메서드를 호출 Dispose 하여) 또는 간접적으로(C#과 같은 using 언어 구문을 사용하여) 삭제해야 합니다. 자세한 내용은 IDisposable을 구현하는 개체 사용을 참조하세요.
생성자
| Name | Description |
|---|---|
| RNGCryptoServiceProvider() |
사용되지 않음.
RNGCryptoServiceProvider 클래스의 새 인스턴스를 초기화합니다. |
| RNGCryptoServiceProvider(Byte[]) |
사용되지 않음.
RNGCryptoServiceProvider 클래스의 새 인스턴스를 초기화합니다. |
| RNGCryptoServiceProvider(CspParameters) |
사용되지 않음.
지정된 매개 변수를 사용하여 클래스의 RNGCryptoServiceProvider 새 인스턴스를 초기화합니다. |
| RNGCryptoServiceProvider(String) |
사용되지 않음.
RNGCryptoServiceProvider 클래스의 새 인스턴스를 초기화합니다. |
메서드
| Name | Description |
|---|---|
| Dispose() |
사용되지 않음.
파생 클래스에서 재정의되는 경우 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 RandomNumberGenerator 해제합니다. (다음에서 상속됨 RandomNumberGenerator) |
| Dispose(Boolean) |
사용되지 않음.
파생 클래스에서 재정의되는 경우 관리되지 않는 리소스를 RandomNumberGenerator 해제하고 관리되는 리소스를 선택적으로 해제합니다. (다음에서 상속됨 RandomNumberGenerator) |
| Equals(Object) |
사용되지 않음.
지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| Finalize() |
사용되지 않음.
클래스에서 사용하는 리소스를 해제합니다 RNGCryptoServiceProvider . |
| GetBytes(Byte[], Int32, Int32) |
사용되지 않음.
지정된 바이트 수에 대해 지정된 인덱스에서 시작하는 값의 암호화된 강력한 임의 시퀀스로 지정된 바이트 배열을 채웁니다. |
| GetBytes(Byte[], Int32, Int32) |
사용되지 않음.
지정된 바이트 배열을 암호화된 강력한 임의 값 시퀀스로 채웁니다. (다음에서 상속됨 RandomNumberGenerator) |
| GetBytes(Byte[]) |
사용되지 않음.
바이트 배열을 임의 값의 암호화된 강력한 시퀀스로 채웁니다. |
| GetBytes(Span<Byte>) |
사용되지 않음.
범위를 암호화적으로 강력한 임의 바이트로 채웁니다. |
| GetBytes(Span<Byte>) |
사용되지 않음.
범위를 암호화적으로 강력한 임의 바이트로 채웁니다. (다음에서 상속됨 RandomNumberGenerator) |
| GetHashCode() |
사용되지 않음.
기본 해시 함수로 사용됩니다. (다음에서 상속됨 Object) |
| GetNonZeroBytes(Byte[]) |
사용되지 않음.
임의의 0이 아닌 값의 암호화된 강력한 시퀀스로 바이트 배열을 채웁니다. |
| GetNonZeroBytes(Span<Byte>) |
사용되지 않음.
바이트 범위를 0이 아닌 값의 암호화된 강력한 임의 시퀀스로 채웁니다. |
| GetNonZeroBytes(Span<Byte>) |
사용되지 않음.
바이트 범위를 0이 아닌 값의 암호화된 강력한 임의 시퀀스로 채웁니다. (다음에서 상속됨 RandomNumberGenerator) |
| GetType() |
사용되지 않음.
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| MemberwiseClone() |
사용되지 않음.
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| ToString() |
사용되지 않음.
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
스레드 보안
이 형식은 스레드로부터 안전합니다.