RSAPKCS1KeyExchangeFormatter 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 die PKCS#1-Schlüsselaustauschdaten mithilfe von RSA.
public ref class RSAPKCS1KeyExchangeFormatter : System::Security::Cryptography::AsymmetricKeyExchangeFormatter
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[System.Runtime.InteropServices.ComVisible(true)]
public class RSAPKCS1KeyExchangeFormatter : System.Security.Cryptography.AsymmetricKeyExchangeFormatter
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RSAPKCS1KeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
type RSAPKCS1KeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
[<System.Runtime.InteropServices.ComVisible(true)>]
type RSAPKCS1KeyExchangeFormatter = class
inherit AsymmetricKeyExchangeFormatter
Public Class RSAPKCS1KeyExchangeFormatter
Inherits AsymmetricKeyExchangeFormatter
- Vererbung
- Attribute
Beispiele
Im folgenden Beispiel wird gezeigt, wie die RSAPKCS1KeyExchangeFormatter -Klasse verwendet wird, um einen Austauschschlüssel für einen Nachrichtenempfänger zu 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
RSAPKCS1KeyExchangeFormatter keyFormatter = new RSAPKCS1KeyExchangeFormatter(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
RSAPKCS1KeyExchangeDeformatter keyDeformatter = new RSAPKCS1KeyExchangeDeformatter(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)
Dim bob As New Bob()
Try
Dim rsaKey As New RSACryptoServiceProvider()
Try
' 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)
Finally
rsaKey.Dispose()
End Try
Finally
bob.Dispose()
End Try
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)
Dim aes = New AesCryptoServiceProvider()
Try
iv = aes.IV
' Encrypt the session key
Dim keyFormatter As New RSAPKCS1KeyExchangeFormatter(key)
encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, GetType(Aes))
' Encrypt the message
Dim ciphertext As New MemoryStream()
Try
Dim cs As New CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)
Try
Dim plaintextMessage As Byte() = Encoding.UTF8.GetBytes(secretMessage)
cs.Write(plaintextMessage, 0, plaintextMessage.Length)
cs.Close()
encryptedMessage = ciphertext.ToArray()
Finally
cs.Dispose()
End Try
Finally
ciphertext.Dispose()
End Try
Finally
aes.Dispose()
End Try
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)
Dim aes = New AesCryptoServiceProvider()
Try
aes.IV = iv
' Decrypt the session key
Dim keyDeformatter As New RSAPKCS1KeyExchangeDeformatter(rsaKey)
aes.Key = keyDeformatter.DecryptKeyExchange(encryptedSessionKey)
' Decrypt the message
Dim plaintext As New MemoryStream()
Try
Dim cs As New CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write)
Try
cs.Write(encryptedMessage, 0, encryptedMessage.Length)
cs.Close()
Dim message As String = Encoding.UTF8.GetString(plaintext.ToArray())
Console.WriteLine(message)
Finally
cs.Dispose()
End Try
Finally
plaintext.Dispose()
End Try
Finally
aes.Dispose()
End Try
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 (z. B. zufällige Daten, die in einem symmetrischen Verschlüsselungsalgorithmus als Schlüssel verwendet werden können) zu erstellen und diese mithilfe der Verschlüsselung an den vorgesehenen Empfänger zu senden.
Verwenden Sie RSAPKCS1KeyExchangeDeformatter , um den Schlüsselaustausch zu erhalten und die Geheiminformationen daraus zu extrahieren.
Achtung
Es wird empfohlen, nicht zu versuchen, eine 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
RSAPKCS1KeyExchangeFormatter() |
Initialisiert eine neue Instanz der RSAPKCS1KeyExchangeFormatter-Klasse. |
RSAPKCS1KeyExchangeFormatter(AsymmetricAlgorithm) |
Initialisiert eine neue Instanz der RSAPKCS1KeyExchangeFormatter-Klasse mit dem angegebenen Schlüssel. |
Eigenschaften
Parameters |
Ruft die Parameter für den PKCS #1-Schlüsselaustausch ab. |
Rng |
Ruft den Algorithmus des Zufallszahlengenerators ab, der bei der Erstellung des Schlüsselaustauschs verwendet werden soll, oder legt ihn fest. |
Methoden
CreateKeyExchange(Byte[]) |
Erstellt anhand der angegebenen Eingabedaten die verschlüsselten Schlüsselaustauschdaten. |
CreateKeyExchange(Byte[], Type) |
Erstellt anhand der angegebenen Eingabedaten die verschlüsselten Schlüsselaustauschdaten. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
SetKey(AsymmetricAlgorithm) |
Legt den öffentlichen Schlüssel zum Verschlüsseln der Schlüsselaustauschdaten fest. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |