RSAOAEPKeyExchangeFormatter Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Erstellt optimalen asymmetrischen Verschlüsselungsabstand (OAEP)-Schlüsselaustauschdaten mithilfe von 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
- Vererbung
- Attribute
Beispiele
Das folgende Beispiel zeigt, wie Sie mithilfe der RSAOAEPKeyExchangeFormatter Klasse einen Exchange-Schlüssel für einen Nachrichtenempfänger erstellen.
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
Hinweise
Der Schlüsselaustausch ermöglicht es einem Absender, geheime Informationen zu erstellen, z. B. zufällige Daten, die als Schlüssel in einem symmetrischen Verschlüsselungsalgorithmus verwendet werden können, und die Verschlüsselung zum Senden an den vorgesehenen Empfänger verwenden.
Wird verwendet RSAOAEPKeyExchangeDeformatter , um den Schlüsselaustausch zu erhalten und die geheimen Informationen daraus zu extrahieren.
Vorsicht
Es wird dringend empfohlen, dass Sie nicht versuchen, ihre eigene Schlüsselaustauschmethode aus der bereitgestellten Grundlegenden Funktionalität zu erstellen, da viele Details des Vorgangs sorgfältig ausgeführt werden müssen, damit der Schlüsselaustausch erfolgreich ist.
Konstruktoren
| Name | Beschreibung |
|---|---|
| RSAOAEPKeyExchangeFormatter() |
Initialisiert eine neue Instanz der RSAOAEPKeyExchangeFormatter-Klasse. |
| RSAOAEPKeyExchangeFormatter(AsymmetricAlgorithm) |
Initialisiert eine neue Instanz der RSAOAEPKeyExchangeFormatter Klasse mit dem angegebenen Schlüssel. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Parameter |
Ruft den Parameter ab, der zum Erstellen des Abstands im Schlüsselaustauschprozess verwendet wird, oder legt diesen fest. |
| Parameters |
Ruft die Parameter für den Optimalen asymmetrischen Verschlüsselungsabstand (OAEP)-Schlüsselaustausch ab. |
| Rng |
Ruft den Algorithmus des Zufallszahlengenerators ab, der bei der Erstellung des Schlüsselaustauschs verwendet werden soll, oder legt diesen fest. |
Methoden
| Name | Beschreibung |
|---|---|
| CreateKeyExchange(Byte[], Type) |
Erstellt die verschlüsselten Schlüsselaustauschdaten aus den angegebenen Eingabedaten. |
| CreateKeyExchange(Byte[]) |
Erstellt die verschlüsselten Schlüsselaustauschdaten aus den angegebenen Eingabedaten. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| SetKey(AsymmetricAlgorithm) |
Legt den öffentlichen Schlüssel fest, der zum Verschlüsseln der Schlüsselaustauschdaten verwendet werden soll. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |