RSACryptoServiceProvider.Decrypt 方法

定义

对以前加密的数据进行解密。Decrypts data that was previously encrypted.

重载

Decrypt(Byte[], Boolean)

使用 RSA 算法加密数据。Decrypts data with the RSA algorithm.

Decrypt(Byte[], RSAEncryptionPadding)

使用指定填充对以前通过 RSA 算法加密的数据进行解密。Decrypts data that was previously encrypted with the RSA algorithm by using the specified padding.

Decrypt(Byte[], Boolean)

使用 RSA 算法加密数据。Decrypts data with the RSA algorithm.

public:
 cli::array <System::Byte> ^ Decrypt(cli::array <System::Byte> ^ rgb, bool fOAEP);
public byte[] Decrypt (byte[] rgb, bool fOAEP);
override this.Decrypt : byte[] * bool -> byte[]
member this.Decrypt : byte[] * bool -> byte[]
Public Function Decrypt (rgb As Byte(), fOAEP As Boolean) As Byte()

参数

rgb
Byte[]

要解密的数据。The data to be decrypted.

fOAEP
Boolean

若要使用 OAEP 填充执行直接 RSA 解密,则为 true;若要使用 PKCS#1 v1.5 填充,则为 falsetrue to perform direct RSA decryption using OAEP padding; otherwise, false to use PKCS#1 v1.5 padding.

返回

Byte[]

已解密的数据,它是加密前的原始纯文本。The decrypted data, which is the original plain text before encryption.

例外

无法获取加密服务提供程序 (CSP)。The cryptographic service provider (CSP) cannot be acquired.

- 或 --or- 参数 fOAEP 的值为 true,并且 rgb 参数的长度大于 KeySizeThe fOAEP parameter is true and the length of the rgb parameter is greater than KeySize.

- 或 --or- 此密钥与解密数据不匹配。The key does not match the encrypted data. 但是,异常用词可能不准确。However, the exception wording may not be accurate. 例如,可能显示 存储空间不够,无法处理此命令For example, it may say Not enough storage is available to process this command.

rgbnullrgb is null.

示例

下面的代码示例对数据进行加密和解密。The following code example encrypts and decrypts data.

此示例使用 ASCIIEncoding 类; 但是, UnicodeEncoding 在大型数据操作中,该类可能更为可取。This example uses the ASCIIEncoding class; however, the UnicodeEncoding class may be preferable in large data operations. 加密值可以保存为 nvarchar Microsoft SQL Server 中的数据类型。The encrypted value can be saved as an nvarchar data type in Microsoft SQL Server.

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Text;
int main()
{
   try
   {
      
      //Create a UnicodeEncoder to convert between byte array and string.
      ASCIIEncoding^ ByteConverter = gcnew ASCIIEncoding;
      String^ dataString = "Data to Encrypt";
      
      //Create byte arrays to hold original, encrypted, and decrypted data.
      array<Byte>^dataToEncrypt = ByteConverter->GetBytes( dataString );
      array<Byte>^encryptedData;
      array<Byte>^decryptedData;
      
      //Create a new instance of the RSACryptoServiceProvider class 
      // and automatically create a new key-pair.
      RSACryptoServiceProvider^ RSAalg = gcnew RSACryptoServiceProvider;
      
      //Display the origianl data to the console.
      Console::WriteLine( "Original Data: {0}", dataString );
      
      //Encrypt the byte array and specify no OAEP padding.  
      //OAEP padding is only available on Microsoft Windows XP or
      //later.  
      encryptedData = RSAalg->Encrypt( dataToEncrypt, false );
      
      //Display the encrypted data to the console. 
      Console::WriteLine( "Encrypted Data: {0}", ByteConverter->GetString( encryptedData ) );
      
      //Pass the data to ENCRYPT and boolean flag specifying 
      //no OAEP padding.
      decryptedData = RSAalg->Decrypt( encryptedData, false );
      
      //Display the decrypted plaintext to the console. 
      Console::WriteLine( "Decrypted plaintext: {0}", ByteConverter->GetString( decryptedData ) );
   }
   catch ( CryptographicException^ e ) 
   {
      
      //Catch this exception in case the encryption did
      //not succeed.
      Console::WriteLine( e->Message );
   }

}

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.
            ASCIIEncoding ByteConverter = new ASCIIEncoding();

            string dataString = "Data to Encrypt";

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

            //Create a new instance of the RSACryptoServiceProvider class
            // and automatically create a new key-pair.
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();

            //Display the origianl data to the console.
            Console.WriteLine("Original Data: {0}", dataString);

            //Encrypt the byte array and specify no OAEP padding.
            //OAEP padding is only available on Microsoft Windows XP or
            //later.
            encryptedData = RSAalg.Encrypt(dataToEncrypt, false);

            //Display the encrypted data to the console.
            Console.WriteLine("Encrypted Data: {0}", ByteConverter.GetString(encryptedData));

            //Pass the data to ENCRYPT and boolean flag specifying
            //no OAEP padding.
            decryptedData = RSAalg.Decrypt(encryptedData, false);

            //Display the decrypted plaintext to the console.
            Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));
        }
        catch(CryptographicException e)
        {
            //Catch this exception in case the encryption did
            //not succeed.
            Console.WriteLine(e.Message);
        }
    }
}
Imports System.Security.Cryptography
Imports System.Text

Module RSACSPExample

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

            Dim dataString As String = "Data to Encrypt"

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

            'Create a new instance of the RSACryptoServiceProvider class 
            ' and automatically create a new key-pair.
            Dim RSAalg As New RSACryptoServiceProvider

            'Display the origianl data to the console.
            Console.WriteLine("Original Data: {0}", dataString)

            'Encrypt the byte array and specify no OAEP padding.  
            'OAEP padding is only available on Microsoft Windows XP or
            'later.  
            encryptedData = RSAalg.Encrypt(dataToEncrypt, False)

            'Display the encrypted data to the console. 
            Console.WriteLine("Encrypted Data: {0}", ByteConverter.GetString(encryptedData))

            'Pass the data to ENCRYPT and boolean flag specifying 
            'no OAEP padding.
            decryptedData = RSAalg.Decrypt(encryptedData, False)

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

End Module

注解

使用 Encrypt 此方法加密要解密的数据。Use Encrypt to encrypt data for decryption with this method.

另请参阅

适用于

Decrypt(Byte[], RSAEncryptionPadding)

使用指定填充对以前通过 RSA 算法加密的数据进行解密。Decrypts data that was previously encrypted with the RSA algorithm by using the specified padding.

public:
 override cli::array <System::Byte> ^ Decrypt(cli::array <System::Byte> ^ data, System::Security::Cryptography::RSAEncryptionPadding ^ padding);
public override byte[] Decrypt (byte[] data, System.Security.Cryptography.RSAEncryptionPadding padding);
override this.Decrypt : byte[] * System.Security.Cryptography.RSAEncryptionPadding -> byte[]
Public Overrides Function Decrypt (data As Byte(), padding As RSAEncryptionPadding) As Byte()

参数

data
Byte[]

要解密的数据。The data to decrypt.

padding
RSAEncryptionPadding

填充。The padding.

返回

Byte[]

已解密的数据。The decrypted data.

例外

datanulldata is null.

- 或 --or- paddingnullpadding is null.

不支持该填充模式。The padding mode is not supported.

注解

padding 必须是 RSAEncryptionPadding.Pkcs1RSAEncryptionPadding.OaepSHA1padding must be either RSAEncryptionPadding.Pkcs1 or RSAEncryptionPadding.OaepSHA1.

适用于