RSAOAEPKeyExchangeFormatter Klass

Definition

Skapar OAEP-nyckelutbytesdata (Optimal asymmetrisk krypteringsutfyllnad) med hjälp av RSA.

public ref class RSAOAEPKeyExchangeFormatter : System::Security::Cryptography::AsymmetricKeyExchangeFormatter
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAOAEPKeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
type RSAOAEPKeyExchangeFormatter = class
    inherit AsymmetricKeyExchangeFormatter
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RSAOAEPKeyExchangeFormatter = class
    inherit AsymmetricKeyExchangeFormatter
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSAOAEPKeyExchangeFormatter = class
    inherit AsymmetricKeyExchangeFormatter
Public Class RSAOAEPKeyExchangeFormatter
Inherits AsymmetricKeyExchangeFormatter
Arv
RSAOAEPKeyExchangeFormatter
Attribut

Exempel

I följande exempel visas hur du använder RSAOAEPKeyExchangeFormatter klassen för att skapa en exchange-nyckel för en meddelandemottagare.

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

class Alice
{
    public static void Main(string[] args)
    {
        using (Bob bob = new Bob())
        {
            using (RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider())
            {
                // Get Bob's public key
                rsaKey.ImportCspBlob(bob.key);
                byte[] encryptedSessionKey = null;
                byte[] encryptedMessage = null;
                byte[] iv = null;
                Send(rsaKey, "Secret message", out iv, out encryptedSessionKey, out encryptedMessage);
                bob.Receive(iv, encryptedSessionKey, encryptedMessage);
            }
        }
    }

    private static void Send(RSA key, string secretMessage, out byte[] iv, out byte[] encryptedSessionKey, out byte[] encryptedMessage)
    {
        using (Aes aes = new AesCryptoServiceProvider())
        {
            iv = aes.IV;

            // Encrypt the session key
            RSAOAEPKeyExchangeFormatter keyFormatter = new RSAOAEPKeyExchangeFormatter(key);
            encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, typeof(Aes));

            // Encrypt the message
            using (MemoryStream ciphertext = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                byte[] plaintextMessage = Encoding.UTF8.GetBytes(secretMessage);
                cs.Write(plaintextMessage, 0, plaintextMessage.Length);
                cs.Close();

                encryptedMessage = ciphertext.ToArray();
            }
        }
    }
}
public class Bob : IDisposable
{
    public byte[] key;
    private RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider();
    public Bob()
    {
        key = rsaKey.ExportCspBlob(false);
    }
    public void Receive(byte[] iv, byte[] encryptedSessionKey, byte[] encryptedMessage)
    {

        using (Aes aes = new AesCryptoServiceProvider())
        {
            aes.IV = iv;

            // Decrypt the session key
            RSAOAEPKeyExchangeDeformatter keyDeformatter = new RSAOAEPKeyExchangeDeformatter(rsaKey);
            aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey);

            // Decrypt the message
            using (MemoryStream plaintext = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(encryptedMessage, 0, encryptedMessage.Length);
                cs.Close();

                string message = Encoding.UTF8.GetString(plaintext.ToArray());
                Console.WriteLine(message);
            }
        }
    }
    public void Dispose()
    {
        rsaKey.Dispose();
    }
}
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text




Class Alice

    Public Shared Sub Main(ByVal args() As String)
        Using bob As New Bob()
            Using rsaKey As New RSACryptoServiceProvider()
                    ' Get Bob's public key
                    rsaKey.ImportCspBlob(bob.key)
                    Dim encryptedSessionKey As Byte() = Nothing
                    Dim encryptedMessage As Byte() = Nothing
                    Dim iv As Byte() = Nothing
                    Send(rsaKey, "Secret message", iv, encryptedSessionKey, encryptedMessage)
                    bob.Receive(iv, encryptedSessionKey, encryptedMessage)
            End Using
        End Using

    End Sub


    Private Shared Sub Send(ByVal key As RSA, ByVal secretMessage As String, ByRef iv() As Byte, ByRef encryptedSessionKey() As Byte, ByRef encryptedMessage() As Byte)
        Using aes = New AesCryptoServiceProvider()

            iv = aes.IV

            ' Encrypt the session key
            Dim keyFormatter As New RSAOAEPKeyExchangeFormatter(key)
            encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, GetType(Aes))

            ' Encrypt the message
            Using ciphertext As New MemoryStream()
                Using cs As New CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)
                    Dim plaintextMessage As Byte() = Encoding.UTF8.GetBytes(secretMessage)
                    cs.Write(plaintextMessage, 0, plaintextMessage.Length)
                    cs.Close()

                    encryptedMessage = ciphertext.ToArray()
                End Using
            End Using
        End Using

    End Sub
End Class

Public Class Bob
    Implements IDisposable
    Public key() As Byte
    Private rsaKey As New RSACryptoServiceProvider()

    Public Sub New()
        key = rsaKey.ExportCspBlob(False)

    End Sub

    Public Sub Receive(ByVal iv() As Byte, ByVal encryptedSessionKey() As Byte, ByVal encryptedMessage() As Byte)

        Using aes = New AesCryptoServiceProvider()

            aes.IV = iv

            ' Decrypt the session key
            Dim keyDeformatter As New RSAOAEPKeyExchangeDeformatter(rsaKey)
            aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey)

            ' Decrypt the message
            Using plaintext As New MemoryStream()
                Using cs As New CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write)
                        cs.Write(encryptedMessage, 0, encryptedMessage.Length)
                        cs.Close()

                        Dim message As String = Encoding.UTF8.GetString(plaintext.ToArray())
                        Console.WriteLine(message)
                End Using
            End Using
        End Using

    End Sub
    Public Overloads Sub Dispose() Implements IDisposable.Dispose
        rsaKey.Dispose()
    End Sub
End Class

Kommentarer

Med nyckelutbyte kan en avsändare skapa hemlig information, till exempel slumpmässiga data som kan användas som en nyckel i en symmetrisk krypteringsalgoritm och använda kryptering för att skicka den till den avsedda mottagaren.

Använd RSAOAEPKeyExchangeDeformatter för att ta emot nyckelutbytet och extrahera den hemliga informationen från den.

Caution

Vi rekommenderar starkt att du inte försöker skapa en egen nyckelutbytesmetod från de grundläggande funktioner som tillhandahålls, eftersom många detaljer om åtgärden måste utföras noggrant för att nyckelutbytet ska lyckas.

Konstruktorer

Name Description
RSAOAEPKeyExchangeFormatter()

Initierar en ny instans av RSAOAEPKeyExchangeFormatter klassen.

RSAOAEPKeyExchangeFormatter(AsymmetricAlgorithm)

Initierar en ny instans av RSAOAEPKeyExchangeFormatter klassen med den angivna nyckeln.

Egenskaper

Name Description
Parameter

Hämtar eller anger parametern som används för att skapa utfyllnad i processen för att skapa nyckelutbyte.

Parameters

Hämtar parametrarna för OAEP-nyckelutbytet (Optimal Asymmetric Encryption Padding).

Rng

Hämtar eller anger den slumptalsgeneratoralgoritm som ska användas när nyckelutbytet skapas.

Metoder

Name Description
CreateKeyExchange(Byte[], Type)

Skapar krypterade nyckelutbytesdata från angivna indata.

CreateKeyExchange(Byte[])

Skapar krypterade nyckelutbytesdata från angivna indata.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
SetKey(AsymmetricAlgorithm)

Anger den offentliga nyckel som ska användas för kryptering av nyckelutbytesdata.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även