RSACryptoServiceProvider Класс

Определение

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

public ref class RSACryptoServiceProvider sealed : System::Security::Cryptography::RSA
public ref class RSACryptoServiceProvider sealed : System::Security::Cryptography::RSA, System::Security::Cryptography::ICspAsymmetricAlgorithm
public sealed class RSACryptoServiceProvider : System.Security.Cryptography.RSA
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RSACryptoServiceProvider : System.Security.Cryptography.RSA, System.Security.Cryptography.ICspAsymmetricAlgorithm
public sealed class RSACryptoServiceProvider : System.Security.Cryptography.RSA, System.Security.Cryptography.ICspAsymmetricAlgorithm
type RSACryptoServiceProvider = class
    inherit RSA
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSACryptoServiceProvider = class
    inherit RSA
    interface ICspAsymmetricAlgorithm
type RSACryptoServiceProvider = class
    inherit RSA
    interface ICspAsymmetricAlgorithm
Public NotInheritable Class RSACryptoServiceProvider
Inherits RSA
Public NotInheritable Class RSACryptoServiceProvider
Inherits RSA
Implements ICspAsymmetricAlgorithm
Наследование
RSACryptoServiceProvider
Атрибуты
Реализации

Примеры

В следующем примере кода класс используется RSACryptoServiceProvider для шифрования строки в массив байтов, а затем расшифровки байтов обратно в строку.

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

class RSACSPSample
{

    static void Main()
    {
        try
        {
            //Create a UnicodeEncoder to convert between byte array and string.
            UnicodeEncoding ByteConverter = new UnicodeEncoding();

            //Create byte arrays to hold original, encrypted, and decrypted data.
            byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
            byte[] encryptedData;
            byte[] decryptedData;

            //Create a new instance of RSACryptoServiceProvider to generate
            //public and private key data.
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {

                //Pass the data to ENCRYPT, the public key information 
                //(using RSACryptoServiceProvider.ExportParameters(false),
                //and a boolean flag specifying no OAEP padding.
                encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);

                //Pass the data to DECRYPT, the private key information 
                //(using RSACryptoServiceProvider.ExportParameters(true),
                //and a boolean flag specifying no OAEP padding.
                decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);

                //Display the decrypted plaintext to the console. 
                Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));
            }
        }
        catch (ArgumentNullException)
        {
            //Catch this exception in case the encryption did
            //not succeed.
            Console.WriteLine("Encryption failed.");
        }
    }

    public static byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
    {
        try
        {
            byte[] encryptedData;
            //Create a new instance of RSACryptoServiceProvider.
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {

                //Import the RSA Key information. This only needs
                //to include the public key information.
                RSA.ImportParameters(RSAKeyInfo);

                //Encrypt the passed byte array and specify OAEP padding.  
                //OAEP padding is only available on Microsoft Windows XP or
                //later.  
                encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
            }
            return encryptedData;
        }
        //Catch and display a CryptographicException  
        //to the console.
        catch (CryptographicException e)
        {
            Console.WriteLine(e.Message);

            return null;
        }
    }

    public static byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
    {
        try
        {
            byte[] decryptedData;
            //Create a new instance of RSACryptoServiceProvider.
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                //Import the RSA Key information. This needs
                //to include the private key information.
                RSA.ImportParameters(RSAKeyInfo);

                //Decrypt the passed byte array and specify OAEP padding.  
                //OAEP padding is only available on Microsoft Windows XP or
                //later.  
                decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
            }
            return decryptedData;
        }
        //Catch and display a CryptographicException  
        //to the console.
        catch (CryptographicException e)
        {
            Console.WriteLine(e.ToString());

            return null;
        }
    }
}
Imports System.Security.Cryptography
Imports System.Text

 _

Class RSACSPSample


    Shared Sub Main()
        Try
            'Create a UnicodeEncoder to convert between byte array and string.
            Dim ByteConverter As New UnicodeEncoding()

            'Create byte arrays to hold original, encrypted, and decrypted data.
            Dim dataToEncrypt As Byte() = ByteConverter.GetBytes("Data to Encrypt")
            Dim encryptedData() As Byte
            Dim decryptedData() As Byte

            'Create a new instance of RSACryptoServiceProvider to generate
            'public and private key data.
            Using RSA As New RSACryptoServiceProvider

                'Pass the data to ENCRYPT, the public key information 
                '(using RSACryptoServiceProvider.ExportParameters(false),
                'and a boolean flag specifying no OAEP padding.
                encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(False), False)

                'Pass the data to DECRYPT, the private key information 
                '(using RSACryptoServiceProvider.ExportParameters(true),
                'and a boolean flag specifying no OAEP padding.
                decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(True), False)

                'Display the decrypted plaintext to the console. 
                Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData))
            End Using
        Catch e As ArgumentNullException
            'Catch this exception in case the encryption did
            'not succeed.
            Console.WriteLine("Encryption failed.")
        End Try
    End Sub


    Public Shared Function RSAEncrypt(ByVal DataToEncrypt() As Byte, ByVal RSAKeyInfo As RSAParameters, ByVal DoOAEPPadding As Boolean) As Byte()
        Try
            Dim encryptedData() As Byte
            'Create a new instance of RSACryptoServiceProvider.
            Using RSA As New RSACryptoServiceProvider

                'Import the RSA Key information. This only needs
                'toinclude the public key information.
                RSA.ImportParameters(RSAKeyInfo)

                'Encrypt the passed byte array and specify OAEP padding.  
                'OAEP padding is only available on Microsoft Windows XP or
                'later.  
                encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding)
            End Using
            Return encryptedData
            'Catch and display a CryptographicException  
            'to the console.
        Catch e As CryptographicException
            Console.WriteLine(e.Message)

            Return Nothing
        End Try
    End Function


    Public Shared Function RSADecrypt(ByVal DataToDecrypt() As Byte, ByVal RSAKeyInfo As RSAParameters, ByVal DoOAEPPadding As Boolean) As Byte()
        Try
            Dim decryptedData() As Byte
            'Create a new instance of RSACryptoServiceProvider.
            Using RSA As New RSACryptoServiceProvider
                'Import the RSA Key information. This needs
                'to include the private key information.
                RSA.ImportParameters(RSAKeyInfo)

                'Decrypt the passed byte array and specify OAEP padding.  
                'OAEP padding is only available on Microsoft Windows XP or
                'later.  
                decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding)
                'Catch and display a CryptographicException  
                'to the console.
            End Using
            Return decryptedData
        Catch e As CryptographicException
            Console.WriteLine(e.ToString())

            Return Nothing
        End Try
    End Function
End Class

В следующем примере кода экспортируются ключевые сведения, созданные с помощью RSACryptoServiceProviderRSAParameters объекта.

try
{
    //Create a new RSACryptoServiceProvider object.
    using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
    {

        //Export the key information to an RSAParameters object.
        //Pass false to export the public key information or pass
        //true to export public and private key information.
        RSAParameters RSAParams = RSA.ExportParameters(false);
    }
}
catch (CryptographicException e)
{
    //Catch this exception in case the encryption did
    //not succeed.
    Console.WriteLine(e.Message);
}
Try

    'Create a new RSACryptoServiceProvider object. 
    Dim RSA As New RSACryptoServiceProvider()

    'Export the key information to an RSAParameters object.
    'Pass false to export the public key information or pass
    'true to export public and private key information.
    Dim RSAParams As RSAParameters = RSA.ExportParameters(False)


Catch e As CryptographicException
    'Catch this exception in case the encryption did
    'not succeed.
    Console.WriteLine(e.Message)
End Try

Комментарии

Дополнительные сведения об этом API см. в дополнительных замечаниях API для RSACryptoServiceProvider.

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

Имя Описание
RSACryptoServiceProvider()

Инициализирует новый экземпляр класса с помощью случайной пары ключей RSACryptoServiceProvider .

RSACryptoServiceProvider(CspParameters)

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

RSACryptoServiceProvider(Int32, CspParameters)

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

RSACryptoServiceProvider(Int32)

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

Поля

Имя Описание
KeySizeValue

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

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

Указывает размеры ключей, поддерживаемые асимметричным алгоритмом.

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

Свойства

Имя Описание
CspKeyContainerInfo

CspKeyContainerInfo Возвращает объект, описывающий дополнительные сведения о паре криптографических ключей.

KeyExchangeAlgorithm

Возвращает имя алгоритма обмена ключами, доступного с этой реализацией RSA.

KeySize

Возвращает размер текущего ключа.

LegalKeySizes

Возвращает размеры ключей, поддерживаемые асимметричным алгоритмом.

LegalKeySizes

Возвращает размеры ключей, поддерживаемые асимметричным алгоритмом.

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

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

PublicOnly

Возвращает значение, указывающее, содержит ли RSACryptoServiceProvider объект только открытый ключ.

SignatureAlgorithm

Возвращает имя алгоритма подписи, доступного с этой реализацией RSA.

UseMachineKeyStore

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

Методы

Имя Описание
Clear()

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

(Унаследовано от AsymmetricAlgorithm)
Decrypt(Byte[], Boolean)

Расшифровывает данные с помощью алгоритма RSA .

Decrypt(Byte[], RSAEncryptionPadding)

Расшифровывает данные, которые ранее были зашифрованы с RSA помощью алгоритма с помощью указанного заполнения.

DecryptValue(Byte[])

Этот метод не поддерживается в текущей версии.

Dispose()

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

(Унаследовано от AsymmetricAlgorithm)
Dispose(Boolean)

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

(Унаследовано от AsymmetricAlgorithm)
Encrypt(Byte[], Boolean)

Шифрует данные с помощью алгоритма RSA .

Encrypt(Byte[], RSAEncryptionPadding)

Шифрует данные с помощью алгоритма RSA с помощью указанного заполнения.

EncryptValue(Byte[])

Этот метод не поддерживается в текущей версии.

Equals(Object)

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

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

Экспортирует большой двоичный объект, содержащий ключевые сведения, связанные с RSACryptoServiceProvider объектом.

ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters)

Экспортирует текущий ключ в формате PKCS#8 EncryptedPrivateKeyInfo с паролем на основе байтов.

(Унаследовано от AsymmetricAlgorithm)
ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters)

Экспортирует текущий ключ в формате PKCS#8 EncryptedPrivateKeyInfo с паролем на основе символов.

(Унаследовано от AsymmetricAlgorithm)
ExportParameters(Boolean)

Экспортирует RSAParametersобъект .

ExportPkcs8PrivateKey()

Экспортирует текущий ключ в формате PKCS#8 PrivateKeyInfo.

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

Экспортирует текущий ключ в формате RSAPrivateKey PKCS#1.

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

Экспортирует часть открытого ключа текущего ключа в формате RSAPublicKey PKCS#1.

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

Экспортирует часть открытого ключа текущего ключа в формате X.509 SubjectPublicKeyInfo.

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

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

FromXmlString(String)

Инициализирует RSA объект из ключевых сведений из XML-строки.

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

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

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

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

(Унаследовано от Object)
HashData(Byte[], Int32, Int32, HashAlgorithmName)

При переопределении в производном классе вычисляет хэш-значение указанной части массива байтов с помощью заданного алгоритма хэширования.

(Унаследовано от RSA)
HashData(Stream, HashAlgorithmName)

При переопределении в производном классе вычисляет хэш-значение указанного двоичного потока с помощью заданного алгоритма хэширования.

(Унаследовано от RSA)
ImportCspBlob(Byte[])

Импортирует большой двоичный объект, представляющий сведения о ключе RSA.

ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Int32)

При переопределении в производном классе импортирует открытый и закрытый ключ из структуры PKCS#8 EncryptedPrivateKeyInfo после расшифровки паролем на основе байтов, заменив ключи для этого объекта.

(Унаследовано от AsymmetricAlgorithm)
ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, ReadOnlySpan<Byte>, Int32)

При переопределении в производном классе импортирует открытый/закрытый ключ из структуры PKCS#8 EncryptedPrivateKeyInfo после расшифровки паролем на основе символов, заменив ключи для этого объекта.

(Унаследовано от AsymmetricAlgorithm)
ImportParameters(RSAParameters)

Импортирует указанный RSAParametersобъект.

ImportPkcs8PrivateKey(ReadOnlySpan<Byte>, Int32)

При переопределении в производном классе импортирует открытый или закрытый ключ из структуры PKCS#8 PrivateKeyInfo после расшифровки, заменив ключи для этого объекта.

(Унаследовано от AsymmetricAlgorithm)
ImportRSAPrivateKey(ReadOnlySpan<Byte>, Int32)

Импортирует открытый или закрытый ключ из структуры RSAPrivateKey PKCS#1 после расшифровки, заменив ключи для этого объекта.

(Унаследовано от RSA)
ImportRSAPublicKey(ReadOnlySpan<Byte>, Int32)

Импортирует открытый ключ из структуры RSAPublicKey PKCS#1 после расшифровки, заменив ключи для этого объекта.

(Унаследовано от RSA)
ImportSubjectPublicKeyInfo(ReadOnlySpan<Byte>, Int32)

При переопределении в производном классе импортирует открытый ключ из структуры SubjectPublicKeyInfo X.509 после расшифровки, заменив ключи для этого объекта.

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

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

(Унаследовано от Object)
SignData(Byte[], HashAlgorithmName, RSASignaturePadding)

Вычисляет хэш-значение указанного массива байтов с помощью указанного хэш-алгоритма и режима заполнения и подписывает полученное хэш-значение.

(Унаследовано от RSA)
SignData(Byte[], Int32, Int32, HashAlgorithmName, RSASignaturePadding)

Вычисляет хэш-значение части указанного массива байтов с помощью указанного хэш-алгоритма и режима заполнения и подписывает полученное хэш-значение.

(Унаследовано от RSA)
SignData(Byte[], Int32, Int32, Object)

Вычисляет хэш-значение подмножества указанного массива байтов с помощью указанного хэш-алгоритма и подписывает полученное хэш-значение.

SignData(Byte[], Object)

Вычисляет хэш-значение указанного массива байтов с помощью указанного алгоритма хэша и подписывает полученное хэш-значение.

SignData(Stream, HashAlgorithmName, RSASignaturePadding)

Вычисляет хэш-значение указанного потока с помощью указанного хэш-алгоритма и режима заполнения и подписывает полученное хэш-значение.

(Унаследовано от RSA)
SignData(Stream, Object)

Вычисляет хэш-значение указанного входного потока с помощью указанного алгоритма хэша и подписывает полученное хэш-значение.

SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)

Вычисляет сигнатуру для указанного хэш-значения с помощью указанного заполнения.

SignHash(Byte[], String)

Вычисляет сигнатуру для указанного хэш-значения.

ToString()

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

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

Создает и возвращает XML-строку, содержащую ключ текущего RSA объекта.

(Унаследовано от RSA)
TryDecrypt(ReadOnlySpan<Byte>, Span<Byte>, RSAEncryptionPadding, Int32)

Пытается расшифровать входные данные с помощью указанного режима заполнения, записывая результат в предоставленный буфер.

(Унаследовано от RSA)
TryEncrypt(ReadOnlySpan<Byte>, Span<Byte>, RSAEncryptionPadding, Int32)

Пытается зашифровать входные данные с указанным режимом заполнения в предоставленный буфер.

(Унаследовано от RSA)
TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters, Span<Byte>, Int32)

При переопределении в производном классе пытается экспортировать текущий ключ в формате PKCS#8 EncryptedPrivateKeyInfo в предоставленный буфер с помощью пароля на основе байтов.

(Унаследовано от AsymmetricAlgorithm)
TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters, Span<Byte>, Int32)

При переопределении в производном классе пытается экспортировать текущий ключ в формате PKCS#8 EncryptedPrivateKeyInfo в предоставленный буфер с помощью пароля на основе символов.

(Унаследовано от AsymmetricAlgorithm)
TryExportPkcs8PrivateKey(Span<Byte>, Int32)

При переопределении в производном классе пытается экспортировать текущий ключ в формате PKCS#8 PrivateKeyInfo в предоставленный буфер.

(Унаследовано от AsymmetricAlgorithm)
TryExportRSAPrivateKey(Span<Byte>, Int32)

Пытается экспортировать текущий ключ в формате RSAPrivateKey PKCS#1 в предоставленный буфер.

(Унаследовано от RSA)
TryExportRSAPublicKey(Span<Byte>, Int32)

Пытается экспортировать текущий ключ в формате RSAPublicKey PKCS#1 в предоставленный буфер.

(Унаследовано от RSA)
TryExportSubjectPublicKeyInfo(Span<Byte>, Int32)

При переопределении в производном классе пытается экспортировать текущий ключ в формате X.509 SubjectPublicKeyInfo в предоставленный буфер.

(Унаследовано от AsymmetricAlgorithm)
TryHashData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32)

Пытается вычислить хэш предоставленных данных с помощью указанного алгоритма, записывая результаты в предоставленный буфер.

(Унаследовано от RSA)
TrySignData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, RSASignaturePadding, Int32)

Пытается хэшировать предоставленные данные с указанным алгоритмом и подписывать хэш с помощью текущего ключа, записывая подпись в предоставленный буфер.

(Унаследовано от RSA)
TrySignHash(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, RSASignaturePadding, Int32)

Пытается подписать хэш с текущим ключом, написав подпись в предоставленный буфер.

(Унаследовано от RSA)
VerifyData(Byte[], Byte[], HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, вычисляя хэш-значение указанных данных с помощью указанного хэш-алгоритма и заполнения и сравнивая его с предоставленной подписью.

(Унаследовано от RSA)
VerifyData(Byte[], Int32, Int32, Byte[], HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, вычисляя хэш-значение данных в части массива байтов, используя указанный хэш-алгоритм и заполнение, а также сравнивая его с предоставленной подписью.

(Унаследовано от RSA)
VerifyData(Byte[], Object, Byte[])

Проверяет, является ли цифровая подпись допустимой, определив хэш-значение в сигнатуре с помощью предоставленного открытого ключа и сравнивая его с хэш-значением предоставленных данных.

VerifyData(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, вычисляя хэш-значение указанных данных с помощью указанного хэш-алгоритма и заполнения и сравнивая его с предоставленной подписью.

(Унаследовано от RSA)
VerifyData(Stream, Byte[], HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, вычисляя хэш-значение указанного потока, используя указанный алгоритм хэша и заполнение, а также сравнивая его с предоставленной подписью.

(Унаследовано от RSA)
VerifyHash(Byte[], Byte[], HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, определив хэш-значение в сигнатуре с помощью указанного алгоритма хэширования и заполнения и сравнивая его с указанным хэш-значением.

VerifyHash(Byte[], String, Byte[])

Проверяет, является ли цифровая подпись допустимой, определив хэш-значение в сигнатуре с помощью предоставленного открытого ключа и сравнивая его с указанным хэш-значением.

VerifyHash(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName, RSASignaturePadding)

Проверяет, является ли цифровая подпись допустимой, определив хэш-значение в сигнатуре с помощью указанного хэш-алгоритма и заполнения и сравнивая его с указанным хэш-значением.

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

Явные реализации интерфейса

Имя Описание
IDisposable.Dispose()

Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.

Описание этого элемента см. в разделе Dispose().

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

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

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