다음을 통해 공유


RSAPKCS1KeyExchangeFormatter 클래스

RSA를 사용하여 PKCS#1 키 교환 데이터를 만듭니다.

네임스페이스: System.Security.Cryptography
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<ComVisibleAttribute(True)> _
Public Class RSAPKCS1KeyExchangeFormatter
    Inherits AsymmetricKeyExchangeFormatter
‘사용 방법
Dim instance As RSAPKCS1KeyExchangeFormatter
[ComVisibleAttribute(true)] 
public class RSAPKCS1KeyExchangeFormatter : AsymmetricKeyExchangeFormatter
[ComVisibleAttribute(true)] 
public ref class RSAPKCS1KeyExchangeFormatter : public AsymmetricKeyExchangeFormatter
/** @attribute ComVisibleAttribute(true) */ 
public class RSAPKCS1KeyExchangeFormatter extends AsymmetricKeyExchangeFormatter
ComVisibleAttribute(true) 
public class RSAPKCS1KeyExchangeFormatter extends AsymmetricKeyExchangeFormatter

설명

키 교환을 통해 송신자는 대칭 암호화 알고리즘에서 키로 사용될 수 있는 임의의 데이터와 같은 비밀 정보를 만든 다음 암호화를 사용하여 수신자에게 보낼 수 있습니다.

RSAPKCS1KeyExchangeDeformatter를 사용하여 키 교환을 수신한 다음 여기에서 비밀 정보를 추출합니다.

경고

제공된 기본 기능으로 개인 키 교환 메서드를 만들지 마십시오. 성공적으로 키를 교환하려면 많은 세부 작업을 주의하여 수행해야 하기 때문입니다.

예제

다음 코드 예제에서는 RSAPKCS1KeyExchangeFormatter 클래스의 멤버를 사용하는 방법을 보여 줍니다.

Imports System
Imports System.Security.Cryptography
Imports System.Text

Public Class Form1
    Inherits System.Windows.Forms.Form

    ' Use a member variable to hold the RSA key for encoding and decoding.
    Private rsaKey As RSA

    ' Event handler for Run button.
    Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        tbxOutput.Cursor = Cursors.WaitCursor
        tbxOutput.Text = ""

        Dim message As String = "A phrase to be encoded."

        InitializeKey(RSA.Create())

        WriteLine("Encoding the following message:")
        WriteLine(message)
        Dim encodedMessage() As Byte = EncodeMessage(message)
        WriteLine("Resulting message encoded:")
        WriteLine(Encoding.ASCII.GetString(encodedMessage))

        Dim decodedMessage As String = DecodeMessage(encodedMessage)
        WriteLine("Resulting message decoded:")
        WriteLine(decodedMessage)

        ' Construct a formatter to demonstrate how to set each property.
        ConstructFormatter()

        ' Construct a deformatter to demonstrate how to set each property.
        ConstructDeformatter()

        ' Align interface and conclude application.
        tbxOutput.AppendText(vbCrLf + "This sample completed " + _
            "successfully; press Exit to continue.")

        ' Reset the cursor.
        tbxOutput.Cursor = Cursors.Default
    End Sub
    ' Initialize an rsaKey member variable with the specified RSA key.
    private sub InitializeKey(byval key as RSA)
        rsaKey = key
    End Sub
    ' Use the RSAPKCS1KeyExchangeDeformatter class to decode the 
    ' specified message.
    Private Function EncodeMessage(ByVal message As String) As Byte()
        Dim encodedMessage() As Byte = Nothing

        Try
            ' Construct a formatter with the specified RSA key.
            Dim keyEncryptor As New RSAPKCS1KeyExchangeFormatter(rsaKey)

            ' Convert the message to bytes to create the encrypted data.
            Dim byteMessage() As Byte
            byteMessage = Encoding.ASCII.GetBytes(message)
            encodedMessage = keyEncryptor.CreateKeyExchange(byteMessage)

        Catch ex As Exception
            WriteLine("Unexpected exception caught:" + ex.ToString())
        End Try

        Return encodedMessage

    End Function
    ' Use the RSAPKCS1KeyExchangeDeformatter class to decode the
    ' specified message.
    Private Function DecodeMessage(ByVal encodedMessage() As Byte) As String
        Dim decodedMessage As String = Nothing

        Try
            ' Construct a deformatter with the specified RSA key.
            Dim keyDecryptor As New RSAPKCS1KeyExchangeDeformatter(rsaKey)

            ' Decrypt the encoded message.
            Dim decodedBytes() As Byte
            decodedBytes = keyDecryptor.DecryptKeyExchange(encodedMessage)

            ' Retrieve a string representation of the decoded message.
            decodedMessage = Encoding.ASCII.GetString(decodedBytes)
        Catch ex As Exception
            WriteLine("Unexpected exception caught:" + ex.ToString())
        End Try

        Return decodedMessage

    End Function
    ' Create an RSAPKCS1KeyExchangeFormatter object with a new RSA key.
    ' Display its properties to the console.
    Private Sub ConstructFormatter()
        ' Construct an empty Optimal Asymmetric Encryption Padding (OAEP)
        ' key exchange.
        Dim rsaFormatter = New RSAPKCS1KeyExchangeFormatter

        ' Create an RSAKey and set it into the specified 
        ' RSAPKCS1KeyExchangeFormatter.
        Dim key As RSA = RSA.Create()
        rsaFormatter.SetKey(key)

        ' Create a random number using RNGCryptoServiceProvider.
        Dim ring As New RNGCryptoServiceProvider
        rsaFormatter.Rng = ring

        WriteLine(vbCrLf + "**" + rsaFormatter.ToString() + "**")
        WriteLine("The following random number was generated for the class:")
        WriteLine(rsaFormatter.Rng.ToString())

        dim xmlParameters as string = rsaFormatter.Parameters

        WriteLine(vbCrLf + "The RSA formatter has the following parameters:")
        WriteLine(xmlParameters)
    End Sub

    ' Create an RSAPKCS1KeyExchangeDeformatter object with a new RSA key.
    ' Display its properties to the console.
    Private Sub ConstructDeformatter()
        ' Construct an empty OAEP key exchange.
        Dim rsaDeformatter As New RSAPKCS1KeyExchangeDeformatter

        ' Create an RSAKey and set it into the specified 
        ' RSAPKCS1KeyExchangeFormatter.
        Dim key As RSA = RSA.Create()
        rsaDeformatter.SetKey(key)

        Dim ring As New RNGCryptoServiceProvider
        rsaDeformatter.RNG = ring

        dim xmlParameters as string = rsaDeformatter.Parameters

        WriteLine(vbCrLf + "**" + rsaDeformatter.ToString() + "**")
        Write(vbCrLf + "The RSA deformatter has the following ")
        WriteLine("parameters:" + xmlParameters)
    End Sub
    ' Write message with carriage return to output textbox.
    Private Sub Write(ByVal message As String)
        tbxOutput.AppendText(message)
    End Sub
    ' Write message with carriage return to output textbox.
    Private Sub WriteLine(ByVal message As String)
        tbxOutput.AppendText(message + vbCrLf)
    End Sub
    ' Event handler for Exit button.
    Private Sub Button2_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click

        Application.Exit()
    End Sub
#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Panel2 As System.Windows.Forms.Panel
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents tbxOutput As System.Windows.Forms.RichTextBox
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.Panel2 = New System.Windows.Forms.Panel
        Me.Button1 = New System.Windows.Forms.Button
        Me.Button2 = New System.Windows.Forms.Button
        Me.Panel1 = New System.Windows.Forms.Panel
        Me.tbxOutput = New System.Windows.Forms.RichTextBox
        Me.Panel2.SuspendLayout()
        Me.Panel1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Panel2
        '
        Me.Panel2.Controls.Add(Me.Button1)
        Me.Panel2.Controls.Add(Me.Button2)
        Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom
        Me.Panel2.DockPadding.All = 20
        Me.Panel2.Location = New System.Drawing.Point(0, 320)
        Me.Panel2.Name = "Panel2"
        Me.Panel2.Size = New System.Drawing.Size(616, 64)
        Me.Panel2.TabIndex = 1
        '
        'Button1
        '
        Me.Button1.Dock = System.Windows.Forms.DockStyle.Right
        Me.Button1.Font = New System.Drawing.Font( _
            "Microsoft Sans Serif", _
            9.0!, _
            System.Drawing.FontStyle.Regular, _
            System.Drawing.GraphicsUnit.Point, _
            CType(0, Byte))
        Me.Button1.Location = New System.Drawing.Point(446, 20)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(75, 24)
        Me.Button1.TabIndex = 2
        Me.Button1.Text = "&Run"
        '
        'Button2
        '
        Me.Button2.Dock = System.Windows.Forms.DockStyle.Right
        Me.Button2.Font = New System.Drawing.Font( _
            "Microsoft Sans Serif", _
            9.0!, _
            System.Drawing.FontStyle.Regular, _
            System.Drawing.GraphicsUnit.Point, _
            CType(0, Byte))
        Me.Button2.Location = New System.Drawing.Point(521, 20)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(75, 24)
        Me.Button2.TabIndex = 3
        Me.Button2.Text = "E&xit"
        '
        'Panel1
        '
        Me.Panel1.Controls.Add(Me.tbxOutput)
        Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
        Me.Panel1.DockPadding.All = 20
        Me.Panel1.Location = New System.Drawing.Point(0, 0)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(616, 320)
        Me.Panel1.TabIndex = 2
        '
        'tbxOutput
        '
        Me.tbxOutput.AccessibleDescription = _
            "Displays output from application."
        Me.tbxOutput.AccessibleName = "Output textbox."
        Me.tbxOutput.Dock = System.Windows.Forms.DockStyle.Fill
        Me.tbxOutput.Location = New System.Drawing.Point(20, 20)
        Me.tbxOutput.Name = "tbxOutput"
        Me.tbxOutput.Size = New System.Drawing.Size(576, 280)
        Me.tbxOutput.TabIndex = 1
        Me.tbxOutput.Text = "Click the Run button to run the application."
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15)
        Me.ClientSize = New System.Drawing.Size(616, 384)
        Me.Controls.Add(Me.Panel1)
        Me.Controls.Add(Me.Panel2)
        Me.Name = "Form1"
        Me.Text = "RSAPKCS1KeyExchangeFormatter"
        Me.Panel2.ResumeLayout(False)
        Me.Panel1.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region
End Class
using System;
using System.Security.Cryptography;
using System.Text;

class RSAEncoder
{
    // Use a member variable to hold the RSA key for encoding and decoding.
    private RSA rsaKey;

    [STAThread]
    static void Main(string[] args)
    {
        string message = "A phrase to be encoded.";

        RSAEncoder rsaEncoder = new RSAEncoder();
        rsaEncoder.InitializeKey(RSA.Create());

        Console.WriteLine("Encoding the following message:");
        Console.WriteLine(message);
        byte[] encodedMessage = rsaEncoder.EncodeMessage(message);
        Console.WriteLine("Resulting message encoded:");
        Console.WriteLine(Encoding.ASCII.GetString(encodedMessage));

        string decodedMessage = rsaEncoder.DecodeMessage(encodedMessage);
        Console.WriteLine("Resulting message decoded:");
        Console.WriteLine(decodedMessage);

        // Construct a formatter to demonstrate how to set each property.
        rsaEncoder.ConstructFormatter();

        // Construct a deformatter to demonstrate how to set each property.
        rsaEncoder.ConstructDeformatter();

        Console.WriteLine("This sample completed successfully; " + 
            "press Enter to exit.");
        Console.ReadLine();
    }

    // Initialize an rsaKey member variable with the specified RSA key.
    private void InitializeKey(RSA key)
    {
        rsaKey = key;
    }

    // Use the RSAPKCS1KeyExchangeDeformatter class to decode the 
    // specified message.
    private byte[] EncodeMessage(string message)
    {
        byte[] encodedMessage = null;

        try
        {
            // Construct a formatter with the specified RSA key.
            RSAPKCS1KeyExchangeFormatter keyEncryptor =
                new RSAPKCS1KeyExchangeFormatter(rsaKey);

            // Convert the message to bytes to create the encrypted data.
            byte[] byteMessage = Encoding.ASCII.GetBytes(message);
            encodedMessage = keyEncryptor.CreateKeyExchange(byteMessage);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected exception caught:" + ex.ToString());
        }

        return encodedMessage;
    }

    // Use the RSAPKCS1KeyExchangeDeformatter class to decode the
    // specified message.
    private string DecodeMessage(byte[] encodedMessage)
    {
        string decodedMessage = null;

        try
        {
            // Construct a deformatter with the specified RSA key.
            RSAPKCS1KeyExchangeDeformatter keyDecryptor =
                new RSAPKCS1KeyExchangeDeformatter(rsaKey);

            // Decrypt the encoded message.
            byte[] decodedBytes =
                keyDecryptor.DecryptKeyExchange(encodedMessage);

            // Retrieve a string representation of the decoded message.
            decodedMessage = Encoding.ASCII.GetString(decodedBytes);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected exception caught:" + ex.ToString());
        }

        return decodedMessage;
    }

    // Create an RSAPKCS1KeyExchangeFormatter object with a new RSA key.
    // Display its properties to the console.
    private void ConstructFormatter()
    {
        // Construct an empty Optimal Asymmetric Encryption Padding (OAEP)
        // key exchange.
        RSAPKCS1KeyExchangeFormatter rsaFormatter =
            new RSAPKCS1KeyExchangeFormatter();

        // Create an RSAKey and set it into the specified 
        // RSAPKCS1KeyExchangeFormatter.
        RSA key = RSA.Create();
        rsaFormatter.SetKey(key);

        // Create a random number using RNGCryptoServiceProvider.
        RNGCryptoServiceProvider ring = new RNGCryptoServiceProvider(); 
        rsaFormatter.Rng = ring;

        Console.WriteLine();
        Console.WriteLine("**" + rsaFormatter.ToString() + "**");
        Console.Write("The following random number was generated using the ");
        Console.WriteLine("class:");
        Console.WriteLine(rsaFormatter.Rng);

        string xmlParameters = rsaFormatter.Parameters;

        Console.WriteLine();
        Console.WriteLine("The RSA formatter has the following parameters:");
        Console.WriteLine(rsaFormatter.Parameters);
    }

    // Create an RSAPKCS1KeyExchangeDeformatter object with a new RSA key.
    // Display its properties to the console.
    private void ConstructDeformatter()
    {
        // Construct an empty OAEP key exchange.
        RSAPKCS1KeyExchangeDeformatter rsaDeformatter = 
            new RSAPKCS1KeyExchangeDeformatter();

        // Create an RSAKey and set it into the specified 
        // RSAPKCS1KeyExchangeFormatter.
        RSA key = RSA.Create();
        rsaDeformatter.SetKey(key);

        RNGCryptoServiceProvider ring = new RNGCryptoServiceProvider(); 
        rsaDeformatter.RNG = ring;

        Console.WriteLine();
        Console.WriteLine("**" + rsaDeformatter.ToString() + "**");

        string xmlParameters = rsaDeformatter.Parameters;

        Console.WriteLine();
        Console.WriteLine("The RSA deformatter has the following ");
        Console.WriteLine("parameters:" + xmlParameters);
    }
}
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Text;

ref class RSAEncoder
{
private:
   // Use a member variable to hold the RSA key for encoding and decoding.
   RSA^ rsaKey;

public:
   [STAThread]
   static void Main()
   {
      String^ message = L"A phrase to be encoded.";
      RSAEncoder^ rsaEncoder = gcnew RSAEncoder;
      rsaEncoder->InitializeKey( RSA::Create() );
      Console::WriteLine( L"Encoding the following message:" );
      Console::WriteLine( message );
      array<Byte>^encodedMessage = rsaEncoder->EncodeMessage( message );
      Console::WriteLine( L"Resulting message encoded:" );
      Console::WriteLine( Encoding::ASCII->GetString( encodedMessage ) );
      String^ decodedMessage = rsaEncoder->DecodeMessage( encodedMessage );
      Console::WriteLine( L"Resulting message decoded:" );
      Console::WriteLine( decodedMessage );
      
      // Construct a formatter to demonstrate how to set each property.
      rsaEncoder->ConstructFormatter();
      
      // Construct a deformatter to demonstrate how to set each property.
      rsaEncoder->ConstructDeformatter();
      Console::WriteLine( L"This sample completed successfully; "
         L"press Enter to exit." );
      Console::ReadLine();
   }

private:
   // Initialize an rsaKey member variable with the specified RSA key.
   void InitializeKey( RSA^ key )
   {
      rsaKey = key;
   }

   // Use the RSAPKCS1KeyExchangeDeformatter class to decode the
   // specified message.
   array<Byte>^ EncodeMessage( String^ message )
   {
      array<Byte>^encodedMessage = nullptr;
      try
      {
         // Construct a formatter with the specified RSA key.
         RSAPKCS1KeyExchangeFormatter^ keyEncryptor =
            gcnew RSAPKCS1KeyExchangeFormatter( rsaKey );

         // Convert the message to bytes to create the encrypted data.
         array<Byte>^byteMessage = Encoding::ASCII->GetBytes( message );
         encodedMessage = keyEncryptor->CreateKeyExchange( byteMessage );
      }
      catch ( Exception^ ex ) 
      {
         Console::WriteLine( L"Unexpected exception caught:{0}", ex );
      }

      return encodedMessage;
   }

   // Use the RSAPKCS1KeyExchangeDeformatter class to decode the
   // specified message.
   String^ DecodeMessage( array<Byte>^encodedMessage )
   {
      String^ decodedMessage = nullptr;
      try
      {
         // Construct a deformatter with the specified RSA key.
         RSAPKCS1KeyExchangeDeformatter^ keyDecryptor =
            gcnew RSAPKCS1KeyExchangeDeformatter( rsaKey );

         // Decrypt the encoded message.
         array<Byte>^decodedBytes = keyDecryptor->DecryptKeyExchange( encodedMessage );

         // Retrieve a string representation of the decoded message.
         decodedMessage = Encoding::ASCII->GetString( decodedBytes );
      }
      catch ( Exception^ ex ) 
      {
         Console::WriteLine( L"Unexpected exception caught:{0}", ex );
      }

      return decodedMessage;
   }

   // Create an RSAPKCS1KeyExchangeFormatter object with a new RSA key.
   // Display its properties to the console.
   void ConstructFormatter()
   {
      // Construct an empty Optimal Asymmetric Encryption Padding (OAEP)
      // key exchange.
      RSAPKCS1KeyExchangeFormatter^ rsaFormatter =
         gcnew RSAPKCS1KeyExchangeFormatter;

      // Create an RSAKey and set it into the specified
      // RSAPKCS1KeyExchangeFormatter.
      RSA^ key = RSA::Create();
      rsaFormatter->SetKey( key );

     // Create a random number using RNGCryptoServiceProvider.
      RNGCryptoServiceProvider^ ring = gcnew RNGCryptoServiceProvider;
      rsaFormatter->Rng = ring;

      Console::WriteLine();
      Console::WriteLine( L"**{0}**", rsaFormatter );
      Console::Write( L"The following random number was generated using the " );
      Console::WriteLine( L"class:" );
      Console::WriteLine( rsaFormatter->Rng );
      
      String^ xmlParameters = rsaFormatter->Parameters;

      Console::WriteLine();
      Console::WriteLine( L"The RSA formatter has the following parameters:" );
      Console::WriteLine( rsaFormatter->Parameters );
   }

   // Create an RSAPKCS1KeyExchangeDeformatter object with a new RSA key.
   // Display its properties to the console.
   void ConstructDeformatter()
   {
      // Construct an empty OAEP key exchange.
      RSAPKCS1KeyExchangeDeformatter^ rsaDeformatter =
         gcnew RSAPKCS1KeyExchangeDeformatter;

      // Create an RSAKey and set it into the specified
      // RSAPKCS1KeyExchangeFormatter.
      RSA^ key = RSA::Create();
      rsaDeformatter->SetKey( key );

      RNGCryptoServiceProvider^ ring = gcnew RNGCryptoServiceProvider;
      rsaDeformatter->RNG = ring;

      Console::WriteLine();
      Console::WriteLine( L"**{0}**", rsaDeformatter );
      
      String^ xmlParameters = rsaDeformatter->Parameters;

      Console::WriteLine();
      Console::WriteLine( L"The RSA deformatter has the following " );
      Console::WriteLine( L"parameters:{0}", xmlParameters );
   }
};

int main()
{
   RSAEncoder::Main();
}
import System.*;
import System.Security.Cryptography.*;
import System.Text.*;

class RSAEncoder
{
    // Use a member variable to hold the RSA key for encoding and decoding.
    private RSA rsaKey;

    /** @attribute STAThread()
     */
    public static void main(String[] args)
    {
        String message = "A phrase to be encoded.";

        RSAEncoder rsaEncoder = new RSAEncoder();
        rsaEncoder.InitializeKey(RSA.Create());

        Console.WriteLine("Encoding the following message:");
        Console.WriteLine(message);
        ubyte encodedMessage[] = rsaEncoder.EncodeMessage(message);
        Console.WriteLine("Resulting message encoded:");
        Console.WriteLine(Encoding.get_ASCII().GetString(encodedMessage));

        String decodedMessage = rsaEncoder.DecodeMessage(encodedMessage);
        Console.WriteLine("Resulting message decoded:");
        Console.WriteLine(decodedMessage);
        // Construct a formatter to demonstrate how to set each property.
        rsaEncoder.ConstructFormatter();
        // Construct a deformatter to demonstrate how to set each property.
        rsaEncoder.ConstructDeformatter();

        Console.WriteLine("This sample completed successfully; " 
            + "press Enter to exit.");
        Console.ReadLine();
    } //main

    // Initialize an rsaKey member variable with the specified RSA key.
    private void InitializeKey(RSA key)
    {
        rsaKey = key;
    } //InitializeKey

    // Use the RSAPKCS1KeyExchangeDeformatter class to decode the 
    // specified message.
    private ubyte[] EncodeMessage(String message)
    {
        ubyte encodedMessage[] = null;
        try {
            // Construct a formatter with the specified RSA key.
            RSAPKCS1KeyExchangeFormatter keyEncryptor 
                = new RSAPKCS1KeyExchangeFormatter(rsaKey);

            // Convert the message to bytes to create the encrypted data.
            ubyte byteMessage[] = Encoding.get_ASCII().GetBytes(message);
            encodedMessage = keyEncryptor.CreateKeyExchange(byteMessage);
        } 
        catch (System.Exception ex) {
            Console.WriteLine("Unexpected exception caught:" + ex.ToString());
        }
        return encodedMessage;
    } //EncodeMessage

    // Use the RSAPKCS1KeyExchangeDeformatter class to decode the
    // specified message.
    private String DecodeMessage(ubyte encodedMessage[])
    {
        String decodedMessage = null;
        try {
            // Construct a deformatter with the specified RSA key.
            RSAPKCS1KeyExchangeDeformatter keyDecryptor 
                = new RSAPKCS1KeyExchangeDeformatter(rsaKey);

            // Decrypt the encoded message.
            ubyte decodedBytes[] = keyDecryptor.
                DecryptKeyExchange(encodedMessage);

            // Retrieve a string representation of the decoded message.
            decodedMessage = Encoding.get_ASCII().GetString(decodedBytes);
        }
        catch (System.Exception ex) {
            Console.WriteLine("Unexpected exception caught:" 
                + ex.ToString());
        }
        return decodedMessage;
    } //DecodeMessage

    // Create an RSAPKCS1KeyExchangeFormatter object with a new RSA key.
    // Display its properties to the console.
    private void ConstructFormatter()
    {
        // Construct an empty Optimal Asymmetric Encryption Padding (OAEP)
        // key exchange.
        RSAPKCS1KeyExchangeFormatter rsaFormatter 
            = new RSAPKCS1KeyExchangeFormatter();

        // Create an RSAKey and set it into the specified 
        // RSAPKCS1KeyExchangeFormatter.
        RSA key = RSA.Create();
        rsaFormatter.SetKey(key);

        // Create a random number using RNGCryptoServiceProvider.
        RNGCryptoServiceProvider ring = new RNGCryptoServiceProvider();
        rsaFormatter.set_Rng(ring);

        Console.WriteLine();
        Console.WriteLine("**" + rsaFormatter.ToString() + "**");
        Console.Write("The following random number was generated using the ");
        Console.WriteLine("class:");
        Console.WriteLine(rsaFormatter.get_Rng());
        String xmlParameters = rsaFormatter.get_Parameters();

        Console.WriteLine();
        Console.WriteLine("The RSA formatter has the following parameters:");
        Console.WriteLine(rsaFormatter.get_Parameters());
    } //ConstructFormatter

    // Create an RSAPKCS1KeyExchangeDeformatter object with a new RSA key.
    // Display its properties to the console.
    private void ConstructDeformatter()
    {
        // Construct an empty OAEP key exchange.
        RSAPKCS1KeyExchangeDeformatter rsaDeformatter 
            = new RSAPKCS1KeyExchangeDeformatter();

        // Create an RSAKey and set it into the specified 
        // RSAPKCS1KeyExchangeFormatter.
        RSA key = RSA.Create();
        rsaDeformatter.SetKey(key);

        RNGCryptoServiceProvider ring = new RNGCryptoServiceProvider();
        rsaDeformatter.set_RNG(ring);

        Console.WriteLine();
        Console.WriteLine("**" + rsaDeformatter.ToString() + "**");
        String xmlParameters = rsaDeformatter.get_Parameters();

        Console.WriteLine();
        Console.WriteLine("The RSA deformatter has the following ");
        Console.WriteLine("parameters:" + xmlParameters);
    } //ConstructDeformatter
} //RSAEncoder

상속 계층 구조

System.Object
   System.Security.Cryptography.AsymmetricKeyExchangeFormatter
    System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

참고 항목

참조

RSAPKCS1KeyExchangeFormatter 멤버
System.Security.Cryptography 네임스페이스

기타 리소스

암호화 서비스