RC2CryptoServiceProvider Class

Definition

Caution

Derived cryptographic types are obsolete. Use the Create method on the base type instead.

Defines a wrapper object to access the cryptographic service provider (CSP) implementation of the RC2 algorithm. This class cannot be inherited.

public ref class RC2CryptoServiceProvider sealed : System::Security::Cryptography::RC2
public sealed class RC2CryptoServiceProvider : System.Security.Cryptography.RC2
[System.Obsolete("Derived cryptographic types are obsolete. Use the Create method on the base type instead.", DiagnosticId="SYSLIB0021", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class RC2CryptoServiceProvider : System.Security.Cryptography.RC2
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RC2CryptoServiceProvider : System.Security.Cryptography.RC2
type RC2CryptoServiceProvider = class
    inherit RC2
[<System.Obsolete("Derived cryptographic types are obsolete. Use the Create method on the base type instead.", DiagnosticId="SYSLIB0021", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type RC2CryptoServiceProvider = class
    inherit RC2
[<System.Runtime.InteropServices.ComVisible(true)>]
type RC2CryptoServiceProvider = class
    inherit RC2
Public NotInheritable Class RC2CryptoServiceProvider
Inherits RC2
Inheritance
RC2CryptoServiceProvider
Attributes

Examples

The following code example encrypts and then decrypts a string.

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

namespace RC2CryptoServiceProvider_Examples
{
    class MyMainClass
    {
        public static void Main()
        {

            // Create a new instance of the RC2CryptoServiceProvider class
            // and automatically generate a Key and IV.
            RC2CryptoServiceProvider rc2CSP = new RC2CryptoServiceProvider();

            Console.WriteLine("Effective key size is {0} bits.", rc2CSP.EffectiveKeySize);

            // Get the key and IV.
            byte[] key = rc2CSP.Key;
            byte[] IV = rc2CSP.IV;

            // Get an encryptor.
            ICryptoTransform encryptor = rc2CSP.CreateEncryptor(key, IV);

            // Encrypt the data as an array of encrypted bytes in memory.
            MemoryStream msEncrypt = new MemoryStream();
            CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);

            // Convert the data to a byte array.
            string original = "Here is some data to encrypt.";
            byte[] toEncrypt = Encoding.ASCII.GetBytes(original);

            // Write all data to the crypto stream and flush it.
            csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
            csEncrypt.FlushFinalBlock();

            // Get the encrypted array of bytes.
            byte[] encrypted = msEncrypt.ToArray();

            ///////////////////////////////////////////////////////
            // This is where the data could be transmitted or saved.
            ///////////////////////////////////////////////////////

            //Get a decryptor that uses the same key and IV as the encryptor.
            ICryptoTransform decryptor = rc2CSP.CreateDecryptor(key, IV);

            // Now decrypt the previously encrypted message using the decryptor
            // obtained in the above step.
            MemoryStream msDecrypt = new MemoryStream(encrypted);
            CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);

            // Read the decrypted bytes from the decrypting stream
            // and place them in a StringBuilder class.

            StringBuilder roundtrip = new StringBuilder();

            int b = 0;

            do
            {
                b = csDecrypt.ReadByte();

                if (b != -1)
                {
                    roundtrip.Append((char)b);
                }
            } while (b != -1);

            // Display the original data and the decrypted data.
            Console.WriteLine("Original:   {0}", original);
            Console.WriteLine("Round Trip: {0}", roundtrip);
        }
    }
}
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography



Module Crypto

    Sub Main()

        ' Create a new instance of the RC2CryptoServiceProvider class
        ' and automatically generate a Key and IV.
        Dim rc2CSP As New RC2CryptoServiceProvider()

        Console.WriteLine("Effective key size is {0} bits.", rc2CSP.EffectiveKeySize)

        ' Get the key and IV.
        Dim key As Byte() = rc2CSP.Key
        Dim IV As Byte() = rc2CSP.IV

        ' Get an encryptor.
        Dim encryptor As ICryptoTransform = rc2CSP.CreateEncryptor(key, IV)

        ' Encrypt the data as an array of encrypted bytes in memory.
        Dim msEncrypt As New MemoryStream()
        Dim csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)

        ' Convert the data to a byte array.
        Dim original As String = "Here is some data to encrypt."
        Dim toEncrypt As Byte() = Encoding.ASCII.GetBytes(original)

        ' Write all data to the crypto stream and flush it.
        csEncrypt.Write(toEncrypt, 0, toEncrypt.Length)
        csEncrypt.FlushFinalBlock()

        ' Get the encrypted array of bytes.
        Dim encrypted As Byte() = msEncrypt.ToArray()

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' This is where the data could be transmitted or saved.
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'Get a decryptor that uses the same key and IV as the encryptor.
        Dim decryptor As ICryptoTransform = rc2CSP.CreateDecryptor(key, IV)

        ' Now decrypt the previously encrypted message using the decryptor
        ' obtained in the above step.
        Dim msDecrypt As New MemoryStream(encrypted)
        Dim csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)

        ' Read the decrypted bytes from the decrypting stream
        ' and place them in a StringBuilder class.
        Dim roundtrip As New StringBuilder()

        Dim b As Integer = 0

        Do
            b = csDecrypt.ReadByte()

            If b <> -1 Then
                roundtrip.Append(ChrW(b))
            End If
        Loop While b <> -1

        ' Display the original data and the decrypted data.
        Console.WriteLine("Original:   {0}", original)
        Console.WriteLine("Round Trip: {0}", roundtrip)

    End Sub
End Module

Remarks

The RC2CryptoServiceProvider implementation supports key lengths from 40 bits to 128 bits in increments of 8 bits.

The RC2CryptoServiceProvider object is a block cipher that encrypts and decrypts data in blocks of 8 bytes. This class pads the final block of data if it is less than 8 bytes. As a result of this padding, the length of encrypted data could be greater than the original plaintext.

Note that the RC2CryptoServiceProvider object does not use salt.

Note

A newer symmetric encryption algorithm, Advanced Encryption Standard (AES), is available. Consider using the Aes algorithm and its derived classes instead of the RC2CryptoServiceProvider class. Use RC2CryptoServiceProvider only for compatibility with legacy applications and data.

Constructors

RC2CryptoServiceProvider()

Initializes a new instance of the RC2CryptoServiceProvider class.

Fields

BlockSizeValue

Represents the block size, in bits, of the cryptographic operation.

(Inherited from SymmetricAlgorithm)
EffectiveKeySizeValue

Represents the effective size of the secret key used by the RC2 algorithm in bits.

(Inherited from RC2)
FeedbackSizeValue

Represents the feedback size, in bits, of the cryptographic operation.

(Inherited from SymmetricAlgorithm)
IVValue

Represents the initialization vector (IV) for the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
KeySizeValue

Represents the size, in bits, of the secret key used by the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
KeyValue

Represents the secret key for the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
LegalBlockSizesValue

Specifies the block sizes, in bits, that are supported by the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
LegalKeySizesValue

Specifies the key sizes, in bits, that are supported by the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
ModeValue

Represents the cipher mode used in the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
PaddingValue

Represents the padding mode used in the symmetric algorithm.

(Inherited from SymmetricAlgorithm)

Properties

BlockSize

Gets or sets the block size, in bits, of the cryptographic operation.

(Inherited from SymmetricAlgorithm)
EffectiveKeySize

Gets or sets the effective size, in bits, of the secret key used by the RC2 algorithm.

FeedbackSize

Gets or sets the feedback size, in bits, of the cryptographic operation for the Cipher Feedback (CFB) and Output Feedback (OFB) cipher modes.

(Inherited from SymmetricAlgorithm)
IV

Gets or sets the initialization vector (IV) for the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
Key

Gets or sets the secret key for the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
KeySize

Gets or sets the size of the secret key used by the RC2 algorithm in bits.

(Inherited from RC2)
LegalBlockSizes

Gets the block sizes, in bits, that are supported by the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
LegalKeySizes

Gets the key sizes, in bits, that are supported by the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
Mode

Gets or sets the mode for operation of the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
Padding

Gets or sets the padding mode used in the symmetric algorithm.

(Inherited from SymmetricAlgorithm)
UseSalt

Gets or sets a value that determines whether to create a key with an 11-byte-long, zero-value salt.

Methods

Clear()

Releases all resources used by the SymmetricAlgorithm class.

(Inherited from SymmetricAlgorithm)
CreateDecryptor()

Creates a symmetric decryptor object with the current Key property and initialization vector (IV).

(Inherited from SymmetricAlgorithm)
CreateDecryptor(Byte[], Byte[])

Creates a symmetric RC2 decryptor object with the specified key (Key) and initialization vector (IV).

CreateEncryptor()

Creates a symmetric encryptor object with the current Key property and initialization vector (IV).

(Inherited from SymmetricAlgorithm)
CreateEncryptor(Byte[], Byte[])

Creates a symmetric RC2 encryptor object with the specified key (Key) and initialization vector (IV).

DecryptCbc(Byte[], Byte[], PaddingMode)

Decrypts data using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Decrypts data using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Decrypts data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
DecryptCfb(Byte[], Byte[], PaddingMode, Int32)

Decrypts data using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Decrypts data using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Decrypts data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
DecryptEcb(Byte[], PaddingMode)

Decrypts data using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Decrypts data using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Decrypts data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
Dispose()

Releases all resources used by the current instance of the SymmetricAlgorithm class.

(Inherited from SymmetricAlgorithm)
Dispose(Boolean)

Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

(Inherited from SymmetricAlgorithm)
EncryptCbc(Byte[], Byte[], PaddingMode)

Encrypts data using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Encrypts data using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Encrypts data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
EncryptCfb(Byte[], Byte[], PaddingMode, Int32)

Encrypts data using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Encrypts data using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Encrypts data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
EncryptEcb(Byte[], PaddingMode)

Encrypts data using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Encrypts data using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Encrypts data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
GenerateIV()

Generates a random initialization vector (IV) to use for the algorithm.

GenerateKey()

Generates a random key (Key) to be used for the algorithm.

GetCiphertextLengthCbc(Int32, PaddingMode)

Gets the length of a ciphertext with a given padding mode and plaintext length in CBC mode.

(Inherited from SymmetricAlgorithm)
GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Gets the length of a ciphertext with a given padding mode and plaintext length in CFB mode.

(Inherited from SymmetricAlgorithm)
GetCiphertextLengthEcb(Int32, PaddingMode)

Gets the length of a ciphertext with a given padding mode and plaintext length in ECB mode.

(Inherited from SymmetricAlgorithm)
GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetType()

Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
ToString()

Returns a string that represents the current object.

(Inherited from Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Attempts to decrypt data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

When overridden in a derived class, attempts to decrypt data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Attempts to decrypt data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

When overridden in a derived class, attempts to decrypt data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Attempts to decrypt data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

When overridden in a derived class, attempts to decrypt data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Attempts to encrypt data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

When overridden in a derived class, attempts to encrypt data into the specified buffer, using CBC mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Attempts to encrypt data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

When overridden in a derived class, attempts to encrypt data into the specified buffer, using CFB mode with the specified padding mode and feedback size.

(Inherited from SymmetricAlgorithm)
TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Attempts to encrypt data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

When overridden in a derived class, attempts to encrypt data into the specified buffer, using ECB mode with the specified padding mode.

(Inherited from SymmetricAlgorithm)
ValidKeySize(Int32)

Determines whether the specified key size is valid for the current algorithm.

(Inherited from SymmetricAlgorithm)

Explicit Interface Implementations

IDisposable.Dispose()

This API supports the product infrastructure and is not intended to be used directly from your code.

Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

(Inherited from SymmetricAlgorithm)

Applies to

See also